我正在尝试使用 celery 尽可能提高浏览器响应时间。我正在处理这个工作流程问题。
- 用户进入第一页,输入数据。
- View 启动一个 celery 任务,然后用第二页响应。
- 用户在第二页输入数据。
- 视图以第三页响应,这需要完成由第 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 ...
从主题上讲,是不是用芹菜来开始一个冗长的任务,做一些其他的事情,然后在完成冗长的任务后继续?