我有一个将数据保存到Redis的对象。它需要尽可能少地阻止,所以我决定使用Celery卸载任务。当我尝试.save()芹菜之外的对象时,它连接到Redis并存储数据就好了。但是,当我尝试从Celery任务执行完全相同的操作时,它看起来像是在运行,但是没有与Redis的连接,没有异常,没有错误输出,也没有任何东西可以保存到Redis服务器。我用下面的一小段代码复制了这个问题。 test.py:
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 :(得分:0)
问题是由celeryconfig.py中的配置错误引起的。 CELERY_IMPORTS需要包含任务模块。这已经解决了。