2014-10-29 91 views
1

我已經在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 
+0

不知道這是否相關,但我確實創建了一個名爲print_hello的任務,其中ignore_result設置爲true。但是,當我在shell中檢查了ignore_result的值時,結果是錯誤的! – 2014-10-29 19:33:16

回答

2

原來這是一個Windows問題。對於誠實的份上,我應該說我從這裏的答案:Celery 'Getting Started' not able to retrieve results; always pending

基本上,通過工作人員的--pool =獨奏標誌:

> C:\Python27\Scripts\celery.exe -A messaging.tasks worker --loglevel=info --pool=solo 

我不確定什麼池實現控制雖然。