UDATE3:发现问题。请参阅下面的答案。Django芹菜教程不返回结果
UPDATE2:看来我可能一直在通过manage.py shell运行djcelery教程来处理自动命名和相关导入问题,参见下文。它仍然不适合我,但现在我得到新的日志错误消息。见下文。
更新:我在帖子的底部添加了日志。看起来示例任务没有注册?
原贴:
我试图让Django的芹菜启动和运行。我无法通过这个例子。
我成功地安装的RabbitMQ并通过教程去没有麻烦:http://www.rabbitmq.com/getstarted.html
然后我试图去通过djcelery教程。
当我运行python manage.py celeryd -l info
我得到的消息: [任务] - app.module.add [2011-07-27 21时十七分19秒,990:警告/ MainProcess]芹菜@红杉已经开始。
这样看起来不错。我把这个在我的设置顶端文件:
import djcelery
djcelery.setup_loader()
BROKER_HOST = "localhost"
BROKER_PORT = 5672
BROKER_USER = "guest"
BROKER_PASSWORD = "guest"
BROKER_VHOST = "/"
添加了这些我安装的应用程序:
'djcelery',
这里是我在我的应用程序的任务文件夹tasks.py文件:
from celery.task import task
@task()
def add(x, y):
return x + y
我将此添加到我的django.wsgi文件:
os.environ["CELERY_LOADER"] = "django"
然后我进入这个在命令行:
>>> from app.module.tasks import add
>>> result = add.delay(4,4)
>>> result
(AsyncResult: 7auathu945gry48- a bunch of stuff)
>>> result.ready()
False
所以它看起来像它的工作,但现在的问题是:
>>> result.result
>>> (nothing is returned)
>>> result.get()
当我把在result.get(),它只是挂起。我究竟做错了什么?
UPDATE:这是运行在前台记录仪说,当我开始了工作服务器:
No handlers could be found for logger “multiprocessing”
[Configuration]
- broker: amqplib://[email protected]:5672/
- loader: djcelery.loaders.DjangoLoader
- logfile: [stderr]@INFO
- concurrency: 4
- events: OFF
- beat: OFF
[Queues]
- celery: exchange: celery (direct) binding: celery
[Tasks]
- app.module.add
[2011-07-27 21:17:19, 990: WARNING/MainProcess] [email protected] has started.
C:\Python27\lib\site-packages\django-celery-2.2.4-py2.7.egg\djcelery\loaders.py:80: UserWarning: Using settings.DEBUG leads to a memory leak, neveruse this setting in production environments!
warnings.warn(“Using settings.DEBUG leads to a memory leak, never”
然后当我把命令:
>>> result = add(4,4)
这似乎在错误日志中:
[2011-07-28 11:00:39, 352: ERROR/MainProcess] Unknown task ignored: Task of kind ‘task.add’ is not registered, please make sure it’s imported. Body->”{‘retries’: 0, ‘task’: ‘tasks.add’, ‘args’: (4,4), ‘expires’: None, ‘ta’: None
‘kwargs’: {}, ‘id’: ‘225ec0ad-195e-438b-8905-ce28e7b6ad9’}”
Traceback (most recent call last):
File “C:\Python27\..\celery\worker\consumer.py”,line 368, in receive_message
Eventer=self.event_dispatcher)
File “C:\Python27\..\celery\worker\job.py”,line 306, in from_message
**kw)
File “C:\Python27\..\celery\worker\job.py”,line 275, in __init__
self.task = tasks[self.task_name]
File “C:\Python27\...\celery\registry.py”, line 59, in __getitem__
Raise self.NotRegistered(key)
NotRegistered: ‘tasks.add’
如何获得th是否需要正确注册和处理任务?谢谢。
更新2:
此链接建议没有登记错误可能是由于客户和员工之间的任务名称不匹配 - http://celeryproject.org/docs/userguide/tasks.html#automatic-naming-and-relative-imports
退出manage.py壳,进入了蟒蛇壳进入以下:
>>> from app.module.tasks import add
>>> result = add.delay(4,4)
>>> result.ready()
False
>>> result.result
>>> (nothing returned)
>>> result.get()
(it just hangs there)
,所以我得到了相同的行为,但新的日志信息。从日志,它出现在服务器运行但不会结果反馈出来:
[2011-07-28 11:39:21, 706: INFO/MainProcess] Got task from broker: app.module.tasks.add[7e794740-63c4-42fb-acd5-b9c6fcd545c3]
[2011-07-28 11:39:21, 706: INFO/MainProcess] Task app.module.tasks.add[7e794740-63c4-42fb-acd5-b9c6fcd545c3] succeed in 0.04600000038147s: 8
因此服务器得到了任务,并且计算正确的答案,但它不会发回?为什么不?
您使用的是Windows吗?有报告显示在Celery中没有Windows的结果3 – asksol
是的,我正在使用windows。我即将重新审视利用rabbitmq和芹菜的项目。那么我会记住你的意见。总的来说,我对这两者都非常满意。 – sequoia