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版本。