私は2つのサーバーを持っています:1つはdjangoアプリケーションを実行し、もう1つはrabbitmqキューとCeleryワーカーの両方を実行します。次のようにキュー/労働者を実行しているサーバー上の私のtasks.pyは、タスクが含まれていますそのタスクをインポートできないときにCeleryタスクを実行する
@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)
私はこの方法を見つけましたが、これまでのところテストは機能しませんでした。
セロリのワーカーサーバー上のセロリの作業者ログファイルでtail -Fをテストしてから、ブラウザのsend_taskを含むビューのURLに移動します。私は、テール出力に「受け取った」と表示するタスクを探していますが、そうではありません。
セロリの作業者のログレベルはDEBUGです。ログファイルにはタスクが適切な名前で登録されていることが表示され、djangoアプリケーションのsettings.pyにはrabbitmqサーバの正しいIPと資格が含まれています。さまざまなアプローチを試してみると、send_taskに渡された文字列を有効なタスク(send_task( 'asdf')など)に変更したときにセロリログファイルにエラーメッセージが表示されることがありました。これにより、ログファイルに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
私の周りGoogleで検索してきたとsend_taskに多くを発見していません。私が間違っているかもしれないことに関するアイデア?
両方のマシン間でコードをどのように共有したかを知りたいと思います。ここに私がそれに関連して書いた質問があります:http://stackoverflow.com/questions/28592243/celery-tasks-functions-web-server-vs-remote-serverありがとう! – lajarre