【发布时间】:2018-08-17 06:24:09
【问题描述】:
我在做一个小项目,决定用Django2.0和python3.6+。
在我的 django 视图中,我想调用一堆 REST API 并获取它们的结果(以任何顺序),然后处理我的请求(将某些内容保存到数据库)。
我知道正确的做法是使用aiohttp 并定义一个async 方法并等待它。
我对@987654324@ 以及如果视图方法必须await 这些方法的响应是否应该是异步方法感到困惑。
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)
【问题讨论】:
-
虽然 Django 支持包含 asyncio (3.4+) 的所有 Python 版本,但 Django 2.0 不使用 asyncio,因此没有事件循环。你可能想看看Channels。
标签: python-3.6 python-asyncio aiohttp django-2.0