Django异步请求远程api

时间:2015-02-04 15:35:28

标签: python django api asynchronous tornado

我有以下代码(简化版)

for data in my_data_array:
  res = api_request(data)
  #write result to db

这些请求可能需要一些时间,而且有很多这些请求。如何使循环的每次迭代异步,并使用Django将完成请求的百分比发送到前端。 如果我必须使用Tornado或Celery,请向我提供有关如何将Django与它们集成的信息的链接。

1 个答案:

答案 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)。