Django-如何检查服务器是在ASGI模式下运行还是在WSGI模式下运行?

Django-如何检查服务器是在ASGI模式下运行还是在WSGI模式下运行?,django,gunicorn,wsgi,django-channels,Django,Gunicorn,Wsgi,Django Channels,我们在WSGI模式下运行同一个django项目来处理HTTP请求,在ASGI模式下运行同一个django项目来处理WebSocket。对于WSGI模式,我们使用的是gunicorn3服务器: gunicorn3 --pythonpath . -b 0.0.0.0:8000 chat_bot.wsgi:application daphne --root-path . -b 0.0.0.0 -p 8001 chat_bot.asgi:application 对于ASGI模式,我们使用的是达芙妮服

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

gunicorn3 --pythonpath . -b 0.0.0.0:8000 chat_bot.wsgi:application
daphne --root-path . -b 0.0.0.0 -p 8001 chat_bot.asgi:application
对于ASGI模式,我们使用的是达芙妮服务器:

gunicorn3 --pythonpath . -b 0.0.0.0:8000 chat_bot.wsgi:application
daphne --root-path . -b 0.0.0.0 -p 8001 chat_bot.asgi:application
如何通过编程方式检测当前运行的模式绿色独角兽+WSGI达芙妮+ASGI

一种可能性:

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

os.environ.setdefault('SERVER_GATEWAY_INTERFACE', 'Web')
然后在
asgi.py的内部将其设置为不同的变量:

os.environ.setdefault('SERVER_GATEWAY_INTERFACE', 'Asynchronous')
if os.environ.get('SERVER_GATEWAY_INTERFACE') == 'Web':
    # WSGI, do something
else:
    # ASGI, do something else
然后在代码的其他部分,只需对照环境变量进行检查:

os.environ.setdefault('SERVER_GATEWAY_INTERFACE', 'Asynchronous')
if os.environ.get('SERVER_GATEWAY_INTERFACE') == 'Web':
    # WSGI, do something
else:
    # ASGI, do something else

为什么选择一个环境变量,而不只是在项目中的某个python模块中设置一个全局python变量来存储它呢?