Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我们可以强制运行APScheduler作业存储中的作业吗?_Python_Apscheduler - Fatal编程技术网

Python 我们可以强制运行APScheduler作业存储中的作业吗?

Python 我们可以强制运行APScheduler作业存储中的作业吗?,python,apscheduler,Python,Apscheduler,使用APScheduler 3.0.3版。我的应用程序中的服务在内部使用APScheduler来调度和运行作业。此外,我还围绕实际的APScheduler创建了一个包装器类(只是一个外观,有助于单元测试)。对于这些服务的单元测试,我可以模拟this包装器类。但我有一种情况,我真的希望APScheduler运行作业(在测试期间)。有什么方法可以强制运行作业吗?要实现这一点,没有立即启动作业的默认触发器 您可以获取当前时间并将DateTrigger设置为作业,如下所示: my_job.modify_

使用APScheduler 3.0.3版。我的应用程序中的服务在内部使用APScheduler来调度和运行作业。此外,我还围绕实际的APScheduler创建了一个包装器类(只是一个外观,有助于单元测试)。对于这些服务的单元测试,我可以模拟this包装器类。但我有一种情况,我真的希望APScheduler运行作业(在测试期间)。有什么方法可以强制运行作业吗?

要实现这一点,没有立即启动作业的默认触发器 您可以获取当前时间并将DateTrigger设置为作业,如下所示:

my_job.modify_job(trigger=DateTrigger(run_date=datetime.datetime.now()))
通过这种方式,您将“强制”运行作业,但您必须确保再次将作业插入计划程序,另一个选项是创建一个新作业以运行与add_job函数相同的函数

sched.add_job(func=your_function(),
              trigger=DateTrigger(run_date=datetime.datetime.now()))

这样您就不必执行任何附加步骤。

另一种方法:您可以在单独的函数中编写作业逻辑。因此,您可以在计划的作业中以及在其他地方调用此函数。我想这是一种更明确的方式来完成您想要的任务。

这有一个缺点,即允许并发运行您的代码,以防在您手动调用函数时调度程序碰巧“唤醒”。