如何在django2.0中进行几个异步方法调用

时间:2018-03-08 19:22:01

标签: python-3.6 python-asyncio aiohttp django-2.0

我正在做一个小项目并决定使用Django2.0和python3.6 +。

在我的django视图中,我想调用一堆REST API并以任意顺序获取结果,然后处理我的请求(将内容保存到数据库中)。

我知道正确的方法是使用aiohttp并定义async方法并等待它。

我对get_event_loop()感到困惑,如果必须await来自这些方法的响应,那么view方法本身应该是异步方法。

Django2.0本身(在python3.6 +中实现)还有一个我可以添加的循环吗?

以下是我想象的观点

from rest_framework import generics
from aiohttp import ClientSession
class CreateView(generics.ListCreateAPIView):
  def perform_create(self, serializer):
    await get_rest_response([url1, url2])

async def fetch(url):
  async with session.get(url) as response:
    return await response.read()

async def get_rest_response(urls):
   async with ClientSession() as session:
      for i in range(urls):
        task = asyncio.ensure_future(fetch(url.format(i), session))
        tasks.append(task)
    responses = await asyncio.gather(*tasks)

1 个答案:

答案 0 :(得分:3)

从技术上讲,您可以通过loop.run_until_complete()来电:

ng serve

但我怀疑这种方法是否会显着加快您的代码速度。 无论如何,Django是一个同步框架。