2010-11-15 19 views
1

我有一個將數據保存到Redis的對象。它需要儘可能的阻止,所以我決定使用芹菜卸下任務。當我嘗試在芹菜外保存()對象時,它連接到Redis並將數據存儲得很好。但是,當我嘗試從Celery任務完成同樣的事情時,它看起來像是在運行,但沒有與Redis的連接,沒有任何異常,沒有錯誤輸出,也沒有任何操作保存到Redis服務器。我用下面的一小段代碼複製了這個問題。 test.py:使用Redis內部的芹菜連接和保存數據任務

from celery.decorators import task 
import redis 

class A(object): 
    def __init__(self): 
     print "init" 

    def save(self): 
     self.r = self.connect() 
     self.r.set('foo', 'bar') 
     print "saved" 

    def connect(self): 
     return redis.Redis(host="localhost", port=6379) 

a = A() 

@task 
def something(a): 
    a.save() 

這裏是Python控制檯輸出:

>>> from test import * 
init 
>>> a 
<test.A object at 0x1010e3c10> 
>>> result = something.delay(a) 
>>> result.ready() 
True 
>>> result.successful() 
True 

這裏是celeryd輸出:

[2010-11-15 12:05:33,672: INFO/MainProcess] Got task from broker: test.something[d1d71ee5-7206-4fa7-844c-04445fd8bead] 
[2010-11-15 12:05:33,688: WARNING/PoolWorker-2] saved 
[2010-11-15 12:05:33,694: INFO/MainProcess] Task test.something[d1d71ee5-7206-4fa7-844c-04445fd8bead] succeeded in 0.00637984275818s: None 

任何幫助將是真棒!我已經在多臺計算機上覆制了這個問題,並帶有多個python版本。

回答

0

問題正在由celeryconfig.py配置錯誤引起的。 CELERY_IMPORTS需要包含任務模塊。這已解決。