关于gunicorn:Django-如何检查服务器是以ASGI还是WSGI模式运行?

Django - How to check if server is running in ASGI or in WSGI mode?

我们正在WSGI模式下运行同一个django项目,以处理HTTP请求,而在ASGI模式下运行同一个Django项目,以处理WebSocket。对于WSGI模式,我们使用gunicorn3服务器:

1
gunicorn3 --pythonpath . -b 0.0.0.0:8000 chat_bot.wsgi:application

对于ASGI模式,我们正在使用daphne服务器:

1
daphne --root-path . -b 0.0.0.0 -p 8001 chat_bot.asgi:application

如何以编程方式检测当前正在运行哪种模式的GreenUnicorn WSGI或Daphne ASGI?


一种可能性:

wsgi.py文件中,您可以将环境变量设置为一个不会在其他任何地方设置的值:

1
os.environ.setdefault('SERVER_GATEWAY_INTERFACE', 'Web')

然后在asgi.py内部将其设置为其他变量:

1
os.environ.setdefault('SERVER_GATEWAY_INTERFACE', 'Asynchronous')

然后在代码的其他部分,只需检查环境变量:

1
2
3
4
if os.environ.get('SERVER_GATEWAY_INTERFACE') == 'Web':
    # WSGI, do something
else:
    # ASGI, do something else