Django 对远程的异步请求 api

Django asynchronous requests to remote api

我有以下代码(简化版)

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

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

您将需要 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 值。

最后一步是查询状态。这只是一个简单的视图,将这两个值从缓存和 returns 加载到用户 (html/json).