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

Python 芹菜快速事件循环用于检查正在运行的任务?

Python 芹菜快速事件循环用于检查正在运行的任务?,python,celery,Python,Celery,随着任务越来越大,我的代码花了太多时间检查运行任务是否完成,这是有意义的,因为它是O(N) 有没有更快的方法来检查发送给芹菜工人的任务是否完成?为什么您真的需要检查正在运行的任务?你可以做一个逻辑,在任务完成后做一些事情。例如,你可以做一个装饰师 另外,如果您还想维护任务列表,我建议使用映射(dict)而不是列表。每个任务都有可以映射到该值的uuid(例如,True)。它将有助于检查任务是否正在运行—速度更快,并且仍将提供对键进行迭代的能力。此外,它还允许通过分配假值,然后在下一次迭代中删除项目

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


有没有更快的方法来检查发送给芹菜工人的任务是否完成?

为什么您真的需要检查正在运行的任务?你可以做一个逻辑,在任务完成后做一些事情。例如,你可以做一个装饰师

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

#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