我是芹菜的新手,并试图在我的应用程序中使用它.以下是我的基本应用程序结构
my_app
|-run.py
|-app
|-mod1
|-mod2
|-tasks
|-__init__.py
|-email
|-other_tasks_file
Run Code Online (Sandbox Code Playgroud)
我想将所有后台任务限制在我的任务模块中.在我的任务的init .py中
from celery import Celery
celery = Celery('my_app', broker='redis://localhost:6379/0')
Run Code Online (Sandbox Code Playgroud)
在我的任务/电子邮件中我有
from app.tasks import celery
@celery.task
def send_email():
#do stuff
Run Code Online (Sandbox Code Playgroud)
从终端我开始使用工人
celery -A app.tasks worker --loglevel=DEBUG
Run Code Online (Sandbox Code Playgroud)
但我的任务没有出现在芹菜的任务列表中.此外,一旦我从解释器运行我的任务就像这样
>>from app.tasks import email
>>email_result = email.send_email.delay()
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我在芹菜终端得到以下回复
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'
Run Code Online (Sandbox Code Playgroud)
我使用的是python 3.4和芹菜3.1.23
Kee*_*gan 17
如果有人需要它,我终于开始工作了.我需要做的是为一个包含任务的实际文件运行一个芹菜工人,以便芹菜注册任务 -
celery -A app.tasks.emails worker --loglevel=DEBUG
Run Code Online (Sandbox Code Playgroud)
因为只是跑步
celery -A app.tasks worker --loglevel=DEBUG
Run Code Online (Sandbox Code Playgroud)
(这是我疯狂的猜测)实际上不会导入我的send_email()任务.如果有人能给我一个解释,请做.