如何使用 ASGI 来部署
同 WSGI 一样,Django 也支持使用 ASGI 来部署,它是为了支持异步网络服务器和应用而新出现的 Python 标准。
Django 的管理命令 startproject
生成了一个默认的 ASGI 配置,你可以按照自己项目的需要去调整这个配置,任何兼容 ASGI 的应用程序服务器都可以直接使用。
Django 提供了下面这些 ASGI 服务的入门文档:
application
对象
与WSGI类似,ASGI需要你提供 application
可以让应用程序服务器用它与你的代码交互。可调用的应用程序 application
一般以一个位于 Python 模块中,名为应用程序 application
的对象的形式提供,且对服务器可见。
startproject
命令创建了文件 1/asgi.py
,其中包含了 application
callable应用程序。
它不会被开发服务器使用 (runserver
) ,但是可以在开发环境或生产环境中用任意一种ASGI服务器来使用。
ASGI服务器通常会以字符串形式获取可调用应用程序的路径;对于大多数Django项目来说,应用程序形如 myproject.asgi:application
。
警告
Django默认的ASGI处理器会将你所有的代码放在一个同步的线程内运行,但你如果选择运行自己的异步处理器,你必须确保它是异步安全的。
不要在异步代码中调用阻塞的同步函数或库。Django会阻止你这样异步不安全地使用Django的内容,但是对第三方应用程序或者Python库不一定会这样。
配置 settings 模块
当 ASGI 服务器加载应用程序时,Django 需要导入配置模块——完整定义应用程序的地方。
Django 利用 DJANGO_SETTINGS_MODULE
环境变量来定位合适的配置模块。它必须包含到配置模块的点式路径。开发环境和生产环境可以配置不同值;这都取决于你是如何组织配置的。
若未设置该变量,文件 asgi.py
默认将其配置为 mysite.settings
, mysite
即工程名字。
应用 ASGI 中间件
为了应用ASGI中间件,或者将Django嵌入到其他的ASGI应用程序中,你可以将Django的 application
应用程序对象包装到 asgi.py
文件中。举个例子:
from some_asgi_library import AmazingMiddleware
application = AmazingMiddleware(application)