today = datetime.datetime.now().strf(''%Y-%m-%d'')
scheduler = BlockingScheduler()
scheduler.add_job(job, 'cron', hour = '9-11', minute = '*/5', end_date = day + " 11:35:00", timezone = tz)
scheduler.start()
scheduler.shutdown()
用 blockingscheduler 不会返回
用 background, shutdown 又没有阻塞,直接就结束了
1
eccentric579 OP 睡了一觉,起来有点思路了。
用 blockingscheduler,那么创建一个检查任务完成就触发异常的 job,用 try 捕捉然后 shutdown 或者用 backgroundsheduler,让主进程检查任务完成,未完成就 sleep 感觉有点像是土办法 |
2
princelai 2021-09-16 09:56:06 +08:00
我之前写过类似的,和你思路差不多,外部用一个类记录状态并判断
```python from apscheduler.executors.pool import ThreadPoolExecutor from apscheduler.jobstores.memory import MemoryJobStore from apscheduler.schedulers.background import BlockingScheduler from loguru import logger class LimitJob: n = 0 @classmethod def print_job(cls): cls.n += 1 logger.info(f"run job {cls.n} times") if cls.n >= 5: jobs.shutdown(wait=False) def init_scheduler() -> BlockingScheduler: jobstores = { 'default': MemoryJobStore() } executors = { 'default': ThreadPoolExecutor(1) } job_defaults = { 'coalesce': False, 'max_instances': 1} scheduler = BlockingScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults) scheduler.add_job(LimitJob.print_job, 'interval', seconds=3, id="print_job") logger.info("调度任务创建成功") scheduler.print_jobs() return scheduler if __name__ == '__main__': jobs = init_scheduler() jobs.start() ``` https://pastebin.ubuntu.com/p/XQMtf4RXgp/ |