我有以下代码(简化版)
for data in my_data_array:
res = api_request(data)
#write result to db
这些请求可能需要一些时间,而且有很多这些请求。如何使循环的每次迭代异步,并使用Django将完成请求的百分比发送到前端。 如果我必须使用Tornado或Celery,请向我提供有关如何将Django与它们集成的信息的链接。
答案 0 :(得分:2)
您将需要Celery(或其他异步任务队列)。要将其与Django集成,请参阅http://celery.readthedocs.org/en/latest/django/first-steps-with-django.html。我建议将Celery与Redis一起使用,因为Redis通常用作缓存,因此您不需要为Celery安装另一个后端(主要是RabbitMQ)。
要获取进度条,计算任务总数(len(my_data_array)
),将值存储在缓存中(例如,密钥total_count),并添加零值的第二个密钥(例如complete_count)。在完成的每个任务中,增加complete_count值。
最后一步是查询状态。它只是一个简单的视图,从缓存中加载这两个值并返回给用户(html / json)。