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秒打印一次 "任务执行了啦"