我有多个API作为数据源,例如-博客文章。我想要实现的是从Django视图并行向该API发送请求并获取结果。无需将结果存储在db中,我需要将它们传递给我的视图响应。我的项目是用python 2.7编写的,所以我不能使用asyncio。我正在寻找有关解决此问题的最佳实践的建议(芹菜,龙卷风等),并举例说明如何实现这一目标,我只是以异步方式开始工作。谢谢。
答案 0 :(得分:0)
一种解决方案是使用Celery并将您的请求参数传递给此方法,并且在前面使用AJAX。
示例:
def my_def (request):
do_something_in_celery.delay()
return Response(something)
要控制任务是否在Celery中完成,可以将Celery的返回值放在变量中:
task_run = do_something_in_celery.delay()
在task_run中有一个属性.id。 您将返回该.id并使用它来监视任务的状态。
在Celery中执行的函数必须具有de装饰器@task
@task
do_something_in_celery(*args, **kwargs):
您将需要控制任务,例如Redis或RabbitMQ。
查看以下网址:
http://masnun.com/2014/08/02/django-celery-easy-async-task-processing.html
答案 1 :(得分:0)
我使用futures lib中的current.futures ThreadPoolExecutor找到了解决方案。
fig.fullwidth = TRUE
您还可以签出rest of the concurrent.futures doc。
重要! ProcessPoolExecutor类在Python 2上存在已知(不可修复)问题,因此不应依赖于该任务执行关键任务。