uwsgi 中的 Python 习惯用法是什么
if __name__ == '__main__':
main()
我在这里发现了uwsgi中的一个长字符串而不是
__main__
uwsgi 使用什么 __name__ 字符串?。但这看起来像是一个解决方法。当 uwsgi 启动我的 python 脚本时,有没有更好的方法来调用一次函数?
这取决于您要防范的是什么。我能想到三个用例:
uwsgi
二进制文件提供了一个名为 uwsgi
的模块,否则该模块不可导入。这最适合用于检测您是否正在运行单元测试。请参阅 在 uwsgi 下运行的单元测试 Flask 应用程序
try:
import uwsgi
except ImportError:
UWSGI_SERVER = False
else:
UWSGI_SERVER = True
if UWSGI_SERVER:
do_something()
else:
import test_utils
test_utils.mock_do_somethng()
这意味着上面的内容,如果您的主模块有一个
uwsgi_file_*
模块名称,那么您正在运行一个 uwsgi
服务器。它还可以让您知道哪个文件作为主模块运行。即包含您的应用程序的那个。也许您正在运行一些微服务,它们都使用相同的核心,但需要根据运行的服务进行稍微不同的配置。
文件:myapp.py
import sys
if __name__ == 'uwsgi_file_myapp':
assert 'uwsgi_file_myapp' in sys.modules, (
'other modules can also see what the main module is'
)
connect_to_redis()
请参阅uwsgi 使用什么 __name__ 字符串?
了解更多详细信息。 在 uwsgi fork 一个工作进程后做一些事情
try:
import uwsgi
except ImportError:
def postfork(func):
"""Dummy decorator for unit tests"""
return func
else:
from uwsgidecorators import postfork
DB = None
@postfork
def init_db():
global DB
from datetime import datetime
DB = f'some-database connection, set @ {datetime.now().isoformat()}'
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [f'{DB=!r}'.encode()]
该程序需要使用
--master
选项运行。例如。
uwsgi --http :8080 --master --wsgi-file myapp.py