我有兩臺服務器:一個運行的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