4

セロリを使用して、可能な限りブラウザの応答時間を改善しようとしています。このワークフローの問題に取り組んでいます。

  1. ユーザーは最初のページに移動し、データを入力します。
  2. View は celery タスクを起動し、次に 2 番目のページで応答します。
  3. ユーザーは 2 ページ目にデータを入力します。
  4. ビューは 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 ...

テーマ的に、セロリを使って長い作業を開始し、他の作業を行い、長い作業が完了したら続行するのは不適切ですか?

4

0 に答える 0