six_001
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import logging
|
||||
import secrets
|
||||
|
||||
from apscheduler.executors.pool import ThreadPoolExecutor
|
||||
from apscheduler.schedulers.blocking import BlockingScheduler
|
||||
from apscheduler.triggers.interval import IntervalTrigger
|
||||
from django.conf import settings
|
||||
|
||||
# 配置日志
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class DingShiQi:
|
||||
def __init__(self):
|
||||
# ✅ 实例属性:每个实例独立
|
||||
self.ding_id = secrets.token_hex(12)
|
||||
# 注册 executors
|
||||
executors = {
|
||||
'my_executor': ThreadPoolExecutor(max_workers=1, ),
|
||||
'you_executor': ThreadPoolExecutor(max_workers=1),
|
||||
}
|
||||
# 使用 BlockingScheduler(会阻塞)
|
||||
self.scheduler = BlockingScheduler(timezone=settings.TIME_ZONE, executors=executors)
|
||||
|
||||
def task任务(self):
|
||||
print("任务执行了啦") # 或 logger.info("任务执行了啦")
|
||||
|
||||
def triggerIntervalTrigger触发器(self) -> IntervalTrigger:
|
||||
return IntervalTrigger(seconds=3)
|
||||
|
||||
def 添加任务(self):
|
||||
self.scheduler.add_job(
|
||||
func=self.task任务,
|
||||
id=self.ding_id,
|
||||
trigger=self.triggerIntervalTrigger触发器(),
|
||||
name="xiaozizi",
|
||||
max_instances=1,
|
||||
misfire_grace_time=1,
|
||||
coalesce=True,
|
||||
executor="my_executor", # 在这里可以选择线程池的名称
|
||||
)
|
||||
|
||||
def startTask(self):
|
||||
logger.info("Starting scheduler...")
|
||||
try:
|
||||
self.scheduler.start() # ⚠️ 这里会阻塞!
|
||||
except KeyboardInterrupt:
|
||||
logger.info("Stopping scheduler...")
|
||||
self.scheduler.shutdown()
|
||||
logger.info("Scheduler shut down successfully!")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
print("TIME_ZONE:", settings.TIME_ZONE)
|
||||
ding = DingShiQi()
|
||||
ding.添加任务()
|
||||
ding.startTask() # ← 会阻塞在这里,每3秒打印一次 "任务执行了啦"
|
||||
Reference in New Issue
Block a user