Подключение и сохранение данных с помощью Redis Inside Celery - PullRequest
1 голос
/ 15 ноября 2010

У меня есть объект, который сохраняет данные в 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.

1 Ответ

0 голосов
/ 15 ноября 2010

Проблема была вызвана неверной конфигурацией в файле celeryconfig.py.CELERY_IMPORTS необходимо включить модуль задачи.Это решено.

...