これらの例に基づいて:セロリー4.0.0およびクラスベースのタスクワークフロー
http://shulhi.com/class-based-celery-task/;
https://blog.balthazar-rouberol.com/celery-best-practices
http://shulhi.com/class-based-celery-task/
Class based Task in django celery
私は似たものを作成したいと思います:
class CalculationWorker(Task):
def __init__(self, id_user):
self._id_user = id_user
self._user = get_object_or_404(User, pk=self._id_user)
# I need to understand if the bind work or if it's needed
def _bind(self, app):
return super(self.__class__, self).bind(celery_app)
def _retrieve_some_task(self):
# long calculation
def _long_run_task(self):
# long calculation
self._retrieve_some_task()
# Main entry
def run(self):
self._long_run_task()
#
def run_job():
worker = CalculationWorker(id_user=323232)
task = worker.apply_async()
ドキュメントはそれが可能だと言っているようだ(とにかく、それは私にははっきりしていない)http://docs.celeryproject.org/en/latest/userguide/tasks.html#custom-task-classes 。それも、こう述べています。
「」」 これはのinitコンストラクタは一度だけプロセスごとに呼び出され、タスククラスは俳優と意味的に近いことをされることを意味 。 『』
は、私が原因このhttps://github.com/celery/celery/issues/3548にNotRegistered例外を得た結果、「ベストプラクティスは、唯一の一般的な動作をオーバーライドするためのカスタムタスククラスを使用して、タスクを実現するためのタスクのデコレータを使用することである」が、app.tasks.register(CalculationWorker())
のdidnを追加:言いますそれを解決しないでください。 私はDjango 1.10.XとCelery 4.0.0を使用しています
このアプローチはまだ有効ですか?
おかげ