Files
2026-08-02 14:07:04 +08:00

59 lines
1.9 KiB
Python

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