Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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 如何在触发新任务/节拍时丢弃一些芹菜任务_Python_Django_Task_Celery - Fatal编程技术网

Python 如何在触发新任务/节拍时丢弃一些芹菜任务

Python 如何在触发新任务/节拍时丢弃一些芹菜任务,python,django,task,celery,Python,Django,Task,Celery,我有如下芹菜任务系统要求: Beat每1分钟触发一次任务A 任务A触发一些任务B 每个任务B触发一些任务C,并以链模式运行任务C 每个任务B或C需要2-5秒(有时接近10秒)才能完成。 有时所有的任务B和C都能在下一节拍之前完成,有时不能 我还有一些其他任务(例如C、D)正在运行,这些任务与任务A/B/C无关 当新的节拍或a到达时,放弃所有未完成的任务B和C(不影响C/D)的最佳实践是什么 我目前的解决方法是为任务B(例如50秒)和任务C(例如40秒)设置不同的过期时间。因此,在大多数情

我有如下芹菜任务系统要求:

  • Beat每1分钟触发一次任务A
  • 任务A触发一些任务B
  • 每个任务B触发一些任务C,并以链模式运行任务C
  • 每个任务B或C需要2-5秒(有时接近10秒)才能完成。
    • 有时所有的任务B和C都能在下一节拍之前完成,有时不能
  • 我还有一些其他任务(例如C、D)正在运行,这些任务与任务A/B/C无关
当新的节拍或a到达时,放弃所有未完成的任务B和C(不影响C/D)的最佳实践是什么


我目前的解决方法是为任务B(例如50秒)和任务C(例如40秒)设置不同的过期时间。因此,在大多数情况下,过期的B/C可以通过过期计时器丢弃

你的变通方法很好,为什么不这样做呢?它并不总是有效的。当我们有一个很长的C列表时,重叠仍然会发生。重叠会消耗额外的CPU负载。我终于找到了expire不起作用的问题。我终于找到了expire不起作用的问题。如果发送了带有过期计时器的任务链(apply_async或delay),则不会立即为所有任务启动过期计时器。计时器仅为第一个任务启动。只有当链中的一个任务完成时,下一个任务的过期时间才会开始。因此,当一系列任务的expire timer设置为40秒时,任务的执行将持续超过40秒。