セロリを使用して、可能な限りブラウザの応答時間を改善しようとしています。このワークフローの問題に取り組んでいます。
- ユーザーは最初のページに移動し、データを入力します。
- View は celery タスクを起動し、次に 2 番目のページで応答します。
- ユーザーは 2 ページ目にデータを入力します。
- ビューは 3 番目のページで応答します。これには、ページ 1 のビュー応答によって開始されたタスクを完了する必要があります。
したがって、ビューがページ 3 の要求に応答する前に、セロリ タスクが完了しているかどうかを確認する必要があります。
私の現在のアイデアは、次のモデルを通じて機能します。
class CeleryTaskmeta(models.Model): # found using python manage.py inspectdb
task_id = models.CharField(max_length=255, unique=True)
status = models.CharField(max_length=150)
result = models.TextField(blank=True)
date_done = models.DateTimeField()
traceback = models.TextField(blank=True)
hidden = models.IntegerField()
meta = models.TextField(blank=True)
class Meta:
db_table = u'celery_taskmeta'
それはうまくいきますか/それを保管するのが最善の考えですかcelerytaskmeta_id
. そして、ユーザーがページ 3 を要求すると、次のようなビューを開始します。
def SomeView(request):
result = CeleryTaskmeta(id = celerytaskmeta_id)
result.get()
rest of SomeView ...
テーマ的に、セロリを使って長い作業を開始し、他の作業を行い、長い作業が完了したら続行するのは不適切ですか?