2016-05-14 4 views
2

Я новичок в сельдерее и пытаюсь использовать его в своем приложении. Ниже представлена ​​моя основная структура приложенияСельдерей «получил незарегистрированную задачу»

my_app 
|-run.py 
|-app 
    |-mod1 
    |-mod2 
    |-tasks 
     |-__init__.py 
     |-email 
     |-other_tasks_file 

Я хочу ограничить все свои фоновые задачи своим модулем задач. В инициализации .py задач у меня есть

from celery import Celery 

celery = Celery('my_app', broker='redis://localhost:6379/0') 

в рамках своих задач/электронной почты у меня есть

from app.tasks import celery 

@celery.task 
def send_email(): 
    #do stuff 

от терминала я начать работника с помощью

celery -A app.tasks worker --loglevel=DEBUG 

Но моя задача не отображается в списке задач сельдерея. Кроме того, когда я запускаю свою задачу от переводчика, как так

>>from app.tasks import email 
>>email_result = email.send_email.delay() 

Когда я делаю это я получаю следующий ответ на мой сельдерей терминал

Received unregistered task of type 'app.tasks.emails.send_email'. 
The message has been ignored and discarded. 

Did you remember to import the module containing this task? 
Or maybe you are using relative imports? 
Please see url for more information. 

The full contents of the message body was: 
{'kwargs': {}, 'taskset': None, 'id': '51e8f766-e772-4d85-bad0-5a6774ea541a', 'eta': None, 'timelimit': (None, None), 'args': [], 'retries': 0, 'task': 'app.tasks.emails.send_email', 'utc': True, 'errbacks': None, 'chord': None, 'expires': None, 'callbacks': None} (283b) 
Traceback (most recent call last): 
File "/usr/local/lib/python3.4/site-packages/celery/app/utils.py", line 235, in find_app 
sym = symbol_by_name(app, imp=imp) 
File "/usr/local/lib/python3.4/site-packages/celery/bin/base.py", line 492, in symbol_by_name 
return symbol_by_name(name, imp=imp) 
File "/usr/local/lib/python3.4/site-packages/kombu/utils/__init__.py", line 101, in symbol_by_name 
return getattr(module, cls_name) if cls_name else module 
AttributeError: 'module' object has no attribute 'tasks' 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
File "/usr/local/lib/python3.4/site-packages/celery/worker/consumer.py", line 456, in on_task_received 
strategies[name](message, body, 
KeyError: 'app.tasks.channels.send_email' 

Я использую Python 3.4 и сельдерей 3.1.23

ответ

13

Если кому-то это нужно, я, наконец, получил его работу. Что мне нужно сделать, был запущен рабочий сельдерея для фактического файла, содержащего задачу заказовМои для сельдерея зарегистрировать задачу -

celery -A app.tasks.emails worker --loglevel=DEBUG 

потому, что просто работает

celery -A app.tasks worker --loglevel=DEBUG 

(это моя дикая догадка) фактически не импортировал бы мою задачу send_email(). Если кто-нибудь может дать мне объяснение, пожалуйста, сделайте это.

Смежные вопросы