4

我正在尝试使用 celery 尽可能提高浏览器响应时间。我正在处理这个工作流程问题。

  1. 用户进入第一页,输入数据。
  2. View 启动一个 celery 任务,然后用第二页响应。
  3. 用户在第二页输入数据。
  4. 视图以第三页响应,这需要完成由第 1 页视图响应启动的任务。

所以在视图可以响应第 3 页的请求之前,它需要检查 celery 任务是否完成。

我目前的想法通过这个模型起作用:

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