gpt4 book ai didi

python - 用于检查正在运行的任务的 Celery 快速事件循环?

转载 作者:太空宇宙 更新时间:2023-11-03 11:29:05 25 4
gpt4 key购买 nike

#ready is populated with some obj
ready = set()
running = []
while ready or running:
#send all tasks in ready
while ready:
#send celery task
t = ready.pop()
res = add.delay(t)
running[res] = t

while running:
if breakout:
break

for run in running.iterkeys():
if run.ready():
rtask = running[run]
result = run.get(interval=0.00001)
# put dependent tasks into ready
if rtask.depends:
for t in rtask.depends:
ready.add(t)

del running[run]
# we have tasks in ready now so break out of running and send out ready jobs
breakout = True
break

随着任务越来越大,我的代码花费了太多时间来检查正在运行的任务是否完成,这是有道理的,因为它是 O(N)

有没有更快的方法来检查发送给 celery worker 的任务是否完成?

最佳答案

为什么您真的需要检查正在运行的任务?您可以制定一个逻辑,在任务完成后执行某些操作。例如,您可以制作装饰器。

此外,如果您仍想维护任务列表 - 我建议使用映射 (dict) 而不是列表。每个任务都有可以映射到值(例如,True)的 uuid。它将有助于检查任务是否正在运行 - 速度更快,并且仍将提供迭代键的能力。此外,它允许通过分配 False 值轻松删除项目,然后在下一次迭代中删除项目(而不是在所有任务都已完成的情况下进行突破和 N*(N-1) 操作。

关于python - 用于检查正在运行的任务的 Celery 快速事件循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26987015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com