celery 3.0のチェーンを使用して作成された実行中のワークフローを一時停止/再開する方法はありますか?
基本的に、システムには2つの異なるタイプのタスクがあります。インタラクティブタスクと非インタラクティブタスクです。非インタラクティブなものにはすべてのパラメーターがありますが、インタラクティブなものにはユーザー入力が必要です。インタラクティブタスクの場合、結果がインタラクティブタスクに影響するため、チェーン内の以前のすべてのタックが完了した後にのみユーザー入力を要求できることに注意してください(つまり、実際のチェーンを作成する前にユーザー入力を要求することはできません)。
これにアプローチする方法について何か提案はありますか?ここで本当に途方に暮れています。
現在のアイデア:
- Taskの2つのサブクラスを作成します(celery import Taskから)。インタラクティブタスクサブクラスに追加のインスタンス(クラスメンバー)変数を追加します。これはデフォルトでfalseに設定されており、ユーザー入力がまだ必要であることを表します。どういうわけか、タスクのインスタンスにアクセスし、セロリワーカーの外部からtrueに設定します(これをかなり調べたので、別のモジュールから直接タスクオブジェクトにアクセスすることはできないようです)
- チェーンをインタラクティブジョブで区切られた複数のチェーンに分割します。チェーンが終了に達したら、セロリワーカーの外部にある種のメカニズムを検出して、インタラクティブタスクのインタラクティブクライアント側コンポーネントをトリガーします。ユーザーがこのすべてのデータを入力したら、データを取得し、インタラクティブタスクが新しいチェーンの先頭にある新しいチェーンを開始します。