Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.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_Events_Concurrency_Apscheduler - Fatal编程技术网

高级Python调度程序(apscheduler)是否交错在同一秒内触发的事件?

高级Python调度程序(apscheduler)是否交错在同一秒内触发的事件?,python,events,concurrency,apscheduler,Python,Events,Concurrency,Apscheduler,我一直在将python“apscheduler”包()编码到我的应用程序中,到目前为止,它运行得很好,我几乎可以用它完成我预想的所有事情 只剩下一个扭结需要熨平 my events正在调用的函数每秒只接受大约3次调用或失败,因为它触发了非常慢的硬件I/O:( 我曾尝试将线程池中的最大线程数从20个限制为1个,以尝试降低执行速度,但由于我并没有在apscheduler上增加一点负载,因此我的事件仍然几乎同时启动(嗯……至少非常非常接近) 有没有办法“错开”在同一秒内触发的不同事件?我不知道apsc

我一直在将python“apscheduler”包()编码到我的应用程序中,到目前为止,它运行得很好,我几乎可以用它完成我预想的所有事情

只剩下一个扭结需要熨平

my events正在调用的函数每秒只接受大约3次调用或失败,因为它触发了非常慢的硬件I/O:(

我曾尝试将线程池中的最大线程数从20个限制为1个,以尝试降低执行速度,但由于我并没有在apscheduler上增加一点负载,因此我的事件仍然几乎同时启动(嗯……至少非常非常接近)


有没有办法“错开”在同一秒内触发的不同事件?

我不知道apscheduler,但您是否考虑过使用Redis列表(队列)并简单地将事件提要序列化到一个临界边界函数中,使其每秒触发不超过三次?(例如,您可以让它以1秒的最大延迟执行阻塞弹出,增加每个事件的触发器计数,在达到3时休眠,并在阻塞弹出超时时将触发器计数归零(或者您可以在每个事件后使用333毫秒休眠).

我不知道apscheduler,但您是否考虑过使用Redis列表(队列)并简单地将事件提要序列化到一个临界边界函数中,使其每秒触发不超过三次?(例如,您可以让它以1秒的最大延迟执行阻塞弹出,增加每个事件的触发器计数,在达到3时休眠,并在阻塞弹出超时时将触发器计数归零(或者您可以在每个事件后仅使用333毫秒休眠)。

我的解决方案供将来参考:


我在被调用的函数中添加了一个基本bool锁和一个wait,这似乎很好地解决了问题,因为引发错误的不是函数本身的调用,而是函数执行的死锁情况:D

我的解决方案供将来参考:


我在被调用的函数中添加了一个基本bool锁和一个wait,这似乎很好地解决了问题,因为引起错误的不是函数本身的调用,而是函数执行的死锁情况:D

我最近发现了这个问题,因为我和你一样,正试图错开预定的时间为弥补硬件速度慢的缺点,需要对作业进行微调

在调度程序
add_job
调用中包含这样的参数会将每个作业的开始时间错开200ms(同时为每个作业递增
idx
):


我最近发现了这个问题,因为我和你一样,试图稍微错开预定的作业,以补偿缓慢的硬件

在调度程序
add_job
调用中包含这样的参数会将每个作业的开始时间错开200ms(同时为每个作业递增
idx
):


您想要使用的是“抖动”选项

发件人:

抖动选项使您能够将随机组件添加到 执行时间。如果您有多个服务器和 不要让他们在同一时刻运行作业,或者如果你愿意的话 防止具有类似选项的多个作业始终运行 同时

例如:

#每小时运行一次“作业”功能,随机选择一个额外的延迟
#在[-120,+120]秒的窗口内。
计划添加作业(作业功能“间隔”,小时数=1,抖动=120)

您想要使用的是“抖动”选项

发件人:

抖动选项使您能够将随机组件添加到 执行时间。如果您有多个服务器和 不要让他们在同一时刻运行作业,或者如果你愿意的话 防止具有类似选项的多个作业始终运行 同时

例如:

#每小时运行一次“作业”功能,随机选择一个额外的延迟
#在[-120,+120]秒的窗口内。
计划添加作业(作业功能“间隔”,小时数=1,抖动=120)

Thnak you,这是一个非常好的建议,但经过一点小的修改后,我在被调用的函数中添加了一个基本布尔锁和一个等待,这似乎很好地实现了这一点,因为引发错误的不是函数本身的调用,而是函数执行的死锁情况:d此线程可能更复杂如果你展示了一些代码,可能只是对相关函数的前/后处理过的代码,这对后人很有用。Thnak,这是一个很好的建议,但是经过一点小的修改,我在被调用的函数中添加了一个基本的布尔锁和一个等待,这似乎很好地完成了这项工作-因为不是函数本身的调用引起了问题错误,而是函数执行的死锁情况:如果您显示了一些代码,则此线程可能对后代更有用,可能只是相关函数的前/后清理。
next_run_time=datetime.datetime.now() + datetime.timedelta(seconds=idx * 0.2)