【问题标题】:How to force apscheduler to add jobs to the job store?如何强制 apscheduler 将作业添加到作业商店?
【发布时间】:2015-05-06 18:34:31
【问题描述】:

我正在使用脚本将作业添加到使用 apscheduler 的调度程序。不幸的是,由于我没有启动调度程序,因此在使用脚本时未正确安排作业。

scheduler = self.getscheduler() # initializes and returns scheduler
scheduler.add_job(trigger=trigger, func = function, jobstore = 'mongo') #sample code. Note that I did not call scheduler.start()

我看到一条消息:apscheduler.scheduler - INFO - Adding job tentatively -- it will be properly scheduled when the scheduler starts

该脚本应该将作业添加到调度程序(而不是在该特定实例上运行调度程序),并且还有一些其他信息要添加到数据库中添加作业的事件中。是否可以在不实际运行调度程序的情况下添加作业并强制调度程序将其添加到作业存储区?

我知道,可以在添加每个作业后启动和关闭调度程序,以使调度程序将作业信息保存到作业存储中。这真的是个好方法吗?

编辑:我的初衷是隔离我的软件的初始化过程。我只是想将一些作业添加到尚未启动的调度程序中。真正的问题是我已经允许用户启动和停止调度程序。我不能保证系统中有一个正在运行的调度程序实例。我通过启动调度程序并在添加作业后将其关闭来暂时解决了这个问题。它有效。

【问题讨论】:

    标签: python cron apscheduler


    【解决方案1】:

    您必须通过某种方式通知调度程序已添加作业,以便它可以唤醒并将延迟调整到下一次唤醒。最好通过某种 RPC 机制来做到这一点。我不知道哪种机制适合您的特定用例。但是 RPyC 和 Execnet 是很好的候选者。使用其中一个或其他东西来远程控制调度程序进程以添加所述作业,你会没事的。

    【讨论】:

    • 我不知道如何使用 RPC。我会试试看,稍后通知。我担心的是调度程序已经知道应该添加该作业。它正在等待调度程序启动,我不打算在那个特定时刻这样做。我希望我们都在同一个页面上。我正在使用python和apscheduler。还是谢谢。
    • 我是否误解了您的要求?您是否没有在最终不会启动调度程序的进程中添加作业?我以为就是这样。
    • 我这辈子没用过 RPC,当我读到你的答案时,我有点困惑。我试图实现我的软件的初始化。我只是想在调度程序中添加一些作业,根本没有启动调度程序。我通过启动调度程序并在之后停止它来暂时解决了这个问题。这真的是正确的做法吗?真正的问题是我已经让用户控制启动和停止调度程序,按照当前的设计,我可能无法确保在添加作业时调度程序实例正在运行。
    • 嗯,这是有问题的。 APScheduler 不是为这样使用而设计的。启动前不添加job到job store的原因是用户可以在此之前进行额外的配置,这会影响最终的job参数。
    • 谢谢。我会想办法的。至少,现在开始和停止工作。
    猜你喜欢
    • 1970-01-01
    • 2016-08-10
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多