import celery
def temptask(n):
header=list(tempsubtask.si(i) for i in range(n))
callback=templink.si('printed at last?')
r = celery.chord(celery.group(header))(callback)
return r
@task()
def tempsubtask(i):
print i
for x in range(i):
time.sleep(2)
current_task.update_state(
state='PROGRESS', meta={'completed': x, 'total': i })
@task()
def templink(x):
print 'this should be run at last %s'%x
#executing temptask
r = temptask(100)
我想访问由tempsubtask更新的进度状态。我怎样才能实现它呢?在
经过几个小时的谷歌搜索,我偶然发现了http://www.manasupo.com/2012/03/chord-progress-in-celery.html。虽然这个解决方案对我来说不是开箱即用的,但它确实激励我尝试类似的方法。在
而不是执行芹菜。和弦我使用ProgressChord如下:
^{pr2}$r的返回值包含一个元组,该元组同时具有回调的asyncresult和组结果。所以成功是这样的:
我继承并重写了},因为我在任何地方都找不到它的源代码。在
[celery.chord][1]
而不是{我也有类似的问题。网上的大多数例子都已经过时了,文档没有多大帮助,但是文档中有指向源代码的链接,阅读确实对我有帮助。 我的目标是分组组织并行任务。这些组必须按顺序执行。 所以我决定在分别开始任何任务之前生成任务id,并且只分配它们。我用的是芹菜4.3.0
下面是一个简单的例子。在
首先,我需要一个虚拟任务使执行顺序化,并能够检查某个组的状态。由于这是一个回调函数,它只会在组中的所有其他任务之后完成。在
我在这里的评论解释了如何分配id。在
^{pr2}$这就是我可以检查我的应用程序中任何任务的状态的方法。在
相关问题 更多 >
编程相关推荐