我已經在Windows 7中玩芹菜現在,我通過了下一步的教程會結果:http://docs.celeryproject.org/en/latest/getting-started/next-steps.html麻煩芹菜隊列
我創建了一個celery.py文件:
from __future__ import absolute_import
from celery import Celery
app = Celery('proj',
broker='amqp://',
backend='amqp://',
include=['proj.tasks'])
# app.conf.update(
# CELERY_TASK_RESULT_EXPIRES=3600,
#)
if __name__ == '__main__':
app.start()
然後,我創建了一個tasks.py文件:
from __future__ import absolute_import
from proj.celery import app
@app.task
def add(x, y):
return x + y
@app.task
def mul(x, y):
return x * y
@app.task
def xsum(numbers):
return sum(numbers)
然後我在一個PowerShell的發射了芹菜工人。然後在另一個PowerShell的我增加了幾個整數:
>>> from proj.tasks import add
>>> res = add.delay(2, 2)
在窗口中運行隊列中,我得到了一個結果的時候了:
[2014-10-29 09:20:28,875: INFO/MainProcess] Received task: proj.tasks.add[3e5783ef-46a1-44d0-893f-0623e5bc0b09]
[2014-10-29 09:20:28,891: INFO/MainProcess] Task proj.tasks.add[3e5783ef-46a1-44d0-893f-0623e5bc0b09] succeeded in 0.016
0000324249s: 4
然而,當我嘗試檢索結果中其他窗口res.get(),該函數只是掛起。我已經多次閱讀教程,並在網上查看,但無法找到問題所在。問題是使用amqp作爲後端嗎?我猜amqp發送狀態作爲消息,而不是存儲它們。奇怪的是,如果我按Ctrl + C並查詢res的狀態,我會得到'PENDING'。
>>> res.status
'PENDING'
我覺得這很奇怪,因爲我認爲任務已完成。我再次檢查了ID以確保。
貌似客戶端被配置爲使用AMQP作爲後端:
>>> print(res.backend)
<celery.backends.amqp.AMQPBackend object at 0x00000000035C0358>
看起來ignore_result被設置爲假。
>>> add
<@task: proj.tasks.add of proj:0x2298390>
>>> add.name
'proj.tasks.add'
>>> add.ignore_result
False
不知道這是否相關,但我確實創建了一個名爲print_hello的任務,其中ignore_result設置爲true。但是,當我在shell中檢查了ignore_result的值時,結果是錯誤的! – 2014-10-29 19:33:16