簡體   English   中英

芹菜任務消失 - Django /芹菜

[英]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))

問題1

幾秒鍾后,我執行以下操作:

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
...

第二個干凈的OS安裝+設置:

一切都按預期工作,仍不確定這里發生了什么......


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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM