【发布时间】:2011-12-19 18:42:32
【问题描述】:
我有两台服务器:一台运行 django 应用程序,一台运行 rabbitmq 队列和 celery worker。我在运行队列/worker 的服务器上的 tasks.py 包含如下任务:
@task(queue="reports")
def test_task():
time.sleep(120)
我的目标是从 django 视图执行此任务。由于该任务的代码与我想调用该任务的 django 视图位于不同的服务器上,因此我尝试使用以下代码将任务从 django 发送到工作机器。
send_task("tasks.test_task", task_id=task_id, args=[], kwargs={}, publisher=publisher, queue=queue)
我找到了这个方法here,但到目前为止测试它还没有奏效。
我在 celery worker 服务器上的 celery worker 日志文件上使用 tail -F 进行测试,然后在浏览器中导航到包含 send_task 的视图的 url。我正在寻找在尾部输出中显示为“已收到”的任务,但它没有。
celery worker 的日志级别为 DEBUG,日志文件显示该任务已使用正确的名称注册,并且 django 应用程序的 settings.py 包含 rabbitmq 服务器的正确 IP 和凭据。在尝试不同的方法时,当我将传递给 send_task 的字符串更改为无效任务(即 send_task('asdf'))时,我偶尔会在 celery 日志文件中看到一条错误消息。这导致日志文件中出现 UnregisteredError。然而,这只是偶尔发生,而且到目前为止,在测试设置和调用的不同组合时,我还没有找到可靠地复制该行为的方法。
另外,这是 django 项目中 settings.py 的相关部分(删除了实际值):
CELERY_RESULT_BACKEND = 'amqp'
BROKER_HOST = 'the.correct.IP.address'
BROKER_USER = 'the_correct_user'
BROKER_PASSWORD = 'the_correct_pass'
BROKER_VHOST = 'the_correct_vhost'
BROKER_PORT = 5672
我用谷歌搜索了很多关于 send_task 的信息。关于我可能做错的任何想法?
【问题讨论】:
-
我很想知道您是如何在两台机器之间共享代码的。这是我写的一个与此相关的问题:stackoverflow.com/questions/28592243/… 谢谢!
标签: python django rabbitmq celery amqp