我有两台服务器:一个运行的Django应用程序和一个同时运行一个RabbitMQ的队列和芹菜工人。我的运行队列/工人在服务器上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,但到目前为止测试它没有奏效。
我与芹菜工人服务器上的芹菜工人日志文件尾部-F测试,然后导航到包含在浏览器send_task视图的URL。我正在寻找在尾部输出中显示为“已收到”的任务,但事实并非如此。
芹菜工作者的日志级别是DEBUG,日志文件显示该任务已注册了正确的名称,而django应用程序的settings.py包含rabbitmq服务器的正确IP和凭证。在尝试不同的方法时,当我将传递给send_task的字符串更改为不是有效任务的字符串(即send_task('asdf'))时,偶尔会在芹菜日志文件中看到一条错误消息。这导致了日志文件中的UnregisteredError。然而,这只是偶尔发生的,到目前为止,在测试设置和调用的不同组合时,我还没有找到可靠地复制行为的方法。
此外,这是settings.py对Django项目的相关部分(与实际值去掉):
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。关于我可能做错什么的想法?
我很想知道如何在两台机器之间共享代码。这里是我写的相关问题:http://stackoverflow.com/questions/28592243/celery-tasks-functions-web-server-vs-remote-server谢谢! – lajarre 2015-02-19 15:30:02