[英]Celery tasks vanishing - Django/Celery
這是我的代碼:
from celery.decorators import task
@task()
def add(x, y):
return x + y
from core.tasks import add
results = []
for i in range(100):
results.append(add.delay(i, i))
幾秒鍾后,我執行以下操作:
for result in results:
print result.result
(這些值不會以模式的形式返回)
None
None
None
None
8
None
None
None
None
18
None
None
None
None
28
None
None
None
None
38
...
一切都按預期工作,仍不確定這里發生了什么......
Django管理界面中的任務也隨機丟失......
誰知道發生了什么事? :|
task.delay()是異步的。 順便說一下,整個AMQP的事情就是讓任務異步。 如果你想要同步行為,那么使用芹菜有什么意義呢?
from celery.decorators import task
@task()
def add(x, y, results):
results.append(x + y)
------------8<-------------
from core.tasks import add
results = []
for i in range(100):
add.delay(i, i, results)
打印前等待幾秒鍾(當消費者完成工作時),並注意結果可能會出現故障。
方法task.delay將返回celery.result.AsyncResult實例。 在使用AsyncResult.result之前,您應該檢查AsyncResult.state == SUCCESS。
您的最終打印循環可能是:
for result in results:
while not result.state.ready():
time.sleep(secs)
if result.state == u'SUCCESS':
print result.result
else:
print "Something Rotten in the State of Denmark..."
這(幾乎)與以下相同:
for result in results:
print result.get()
查看TaskSet ,它們比將結果存儲在列表中更好。
在實踐中,人們將結果存儲在數據庫中,並將等待循環放在客戶端中,然后每隔幾秒就通過AJAX錘擊服務器直到完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.