web-dev-qa-db-ja.com

シェルからセロリの定期的なタスクを手動で実行するにはどうすればよいですか?

セロリとジャンゴセロリを使用しています。テストしたい定期的なタスクを定義しました。コンソール出力を表示するために、シェルから定期タスクを手動で実行することは可能ですか?

66

Djangoシェルからタスクを実行するだけですか?タスクの_.apply_メソッドを使用して、確実にローカルで実行されるようにすることができます。

タスクが_my_task_ in Django app myapp in tasksサブモジュールと呼ばれる場合:

_$ python manage.py Shell
>>> from myapp.tasks import my_task
>>> eager_result = my_task.apply()
_

結果インスタンスは通常のAsyncResultタイプと同じAPIを持ちますが、結果は常に熱心にローカルで評価され、.apply()メソッドはタスクが完了するまでブロックされることを除きます。

88
Platinum Azure

条件が満たされていないときにタスクをトリガーするだけの場合、たとえば、定期的な時間が満たされない場合。 2つの手順で実行できます。

1。タスクIDを取得する

入力することでできます。

celery inspect registered

app.tasks.update_somethingのようなものが表示されます。何もない場合、おそらくceleryが開始されていない可能性があります。実行するだけです。

2。celery callでタスクを実行します

celery call app.tasks.update_something

詳細については、単に入力します

celery --help
celery inspect --help
celery call --help
10
W.Perrin

Python/Djangoシェルからタスクを実行するシェルと、_celery worker_(_python manage.py celery worker_)を実行するシェルの2つのシェルを開く必要があると思います。前の回答で述べたように、apply()またはapply_async()を使用してタスクを実行できます

非推奨のコマンドを使用しないように、回答を編集しました。

6
darkphoenix