Django `python manage.py runserver` 不支持 asyncio&aiohttp

Posted

技术标签:

【中文标题】Django `python manage.py runserver` 不支持 asyncio&aiohttp【英文标题】:Django `python manage.py runserver` does not support asyncio&aiohttp 【发布时间】:2018-12-26 01:52:49 【问题描述】:

在我的 Django 应用程序中,我需要将来自用户的请求代理到其他服务器。我使用asyncio/aiohttp client

#user->request
.....

loop = asyncio.get_event_loop()
future = asyncio.ensure_future(self.run(t1, t2, t3))
loop.run_until_complete(future)

......
# response

当我的django服务器以python manager.py runserver启动时,用户请求时出现如下错误。

RuntimeError: 线程 'Thread-1' 中没有当前事件循环。

但是当我以Gunicorn 开头时,一切正常。

也许我应该使用new_event_loop

为什么Gunicorn没有问题?

【问题讨论】:

【参考方案1】:

尝试以下操作:

loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)

但是在同步 django 中使用 aiohttp 不会提高它的速度,除非你在一个视图中发送大量请求。如果您这样做,最好将该任务移至某个工作人员(例如 Celery)或使用 aiohttp 作为服务器而不是 Django。

【讨论】:

以上是关于Django `python manage.py runserver` 不支持 asyncio&aiohttp的主要内容,如果未能解决你的问题,请参考以下文章

Python Django manage.py提供的命令及用法

django 和 python ./manage.py makemigrations 执行错误

运行python manage.py 出现mportError: No module named django.core.management when using manage.py

django python manage.py runserver 流程

[转]django 1.9之后python manage.py syncdb没有了

DJango数据库报错 python manage.py syncdb