【问题标题】:How to add jobs to threadpool with APScheduler如何使用 APScheduler 将作业添加到线程池
【发布时间】:2016-08-10 03:47:20
【问题描述】:

我是 APScheduler 的新手
为了测试,我设置了max_worker=2 并向调度程序添加了 4 个不同的作业。由于线程池的限制,我打算并行运行 2 个作业,我认为在完成某些作业后,另一个添加的作业会投入到线程池中,但下面的结果不是我所期望的,它只是继续运行前 2 个作业。

Arg is 1, time is Mon Apr 18 19:51:33 2016
Arg is 2, time is Mon Apr 18 19:51:33 2016
No handlers could be found for logger "apscheduler.scheduler"
Arg is 1, time is Mon Apr 18 19:51:37 2016  
Arg is 2, time is Mon Apr 18 19:51:37 2016
Arg is 1, time is Mon Apr 18 19:51:41 2016
Arg is 2, time is Mon Apr 18 19:51:41 2016
Arg is 1, time is Mon Apr 18 19:51:45 2016
Arg is 2, time is Mon Apr 18 19:51:45 2016
...

这里是代码:

import time
from apscheduler.schedulers.blocking import BlockingScheduler

def job(arg):
    print 'Arg is %s, time is %s' % (arg, time.ctime())
    time.sleep(2)

if __name__ == '__main__':
    scheduler = BlockingScheduler({'apscheduler.executors.default': {'class': 'apscheduler.executors.pool:ThreadPoolExecutor', 'max_workers': '2'}})
    scheduler.add_job(job, 'interval', seconds=2, args=(1,))
    scheduler.add_job(job, 'interval', seconds=2, args=(2,))
    scheduler.add_job(job, 'interval', seconds=2, args=(3,))
    scheduler.add_job(job, 'interval', seconds=2, args=(4,))

    try:
        scheduler.start()
    except (KeyboardInterrupt, SystemExit):
        pass

将剩余作业添加到线程池或队列方案或 multiprocessing.dummy.pool 之类的任何方法

【问题讨论】:

    标签: python scheduled-tasks scheduling apscheduler


    【解决方案1】:

    也许您想使用多个线程池执行器并将某些作业限制为某些执行器?

    【讨论】:

      【解决方案2】:

      由于任何原因错过预定时间的作业将被识别为未触发,并且这些作业不会启动。在您的情况下,由于缺乏免费工人,工作被解雇了。将参数misfire_grace_time=1(或其他时间)添加到add_job 调用中。

      【讨论】:

        猜你喜欢
        • 2015-05-06
        • 2017-05-16
        • 1970-01-01
        • 2020-12-10
        • 2011-02-06
        • 2017-09-26
        • 1970-01-01
        • 2015-05-27
        • 1970-01-01
        相关资源
        最近更新 更多