セロリのビートを使って定期的なタスクを設定しました。タスクが実行され、結果がコンソールに表示されます。 タスクによってスローされた結果を再収集するpythonスクリプトが必要です。セロリのタスクIDの取得方法
私はこのようにそれを行うことができます:
#client.py
from cfg_celery import app
task_id = '337fef7e-68a6-47b3-a16f-1015be50b0bc'
try:
x = app.AsyncResult(id)
print(x.get())
except:
print('some error')
をとにかく、あなたが見ることができるように、このテストのために私はセロリビートコンソール(そう言うこと)で投げtask_id
をコピーし、それをハードコーディングしなければならなかった私のスクリプト。明らかに、これは実際の生産では機能しません。
私はそれはセロリの設定ファイルにtask_id
を設定ハッキング:このアプローチの問題は、私が以前を失うということです
#client.py
from cfg_celery import app
task_id = 'my_custom_id'
try:
x = app.AsyncResult(id)
print(x.get())
except:
print('some error')
:
#cfg_celery.py
app = Celery('celery_config',
broker='redis://localhost:6379/0',
include=['taskos'],
backend = 'redis'
)
app.conf.beat_schedule = {
'something': {
'task': 'tasks.add',
'schedule': 10.0,
'args': (16, 54),
'options' : {'task_id':"my_custom_id"},
}
}
私はこのようにそれを読むことができますこの方法結果(client.py
の前)
私はセロリのバックエンドでtask_id
年代のリストを読み込むことができますいくつかの方法はありますか? 複数の定期的なタスクがある場合、各定期タスクからtask_id
のリストを取得できますか? これを行うにはapp.tasks.key()
を使用できますか?
PD:私は間違っているいくつかの用語を使用した場合、英語圏のネイティブを、プラスセロリに新しいものではない、素晴らしいこと。
私は(私は他のpythonのインスタンスから結果をつかむために)私が欲しいものを得るために私は値を格納し、取得するためにredis関数を使用する必要があることになった。私はzaddを使用して結果をredisに書き出し、 'client.py'にzrangeを使用してそれらを取得します。 –