uWSGI 使用预编译的 Python 文件吗?
Does uWSGI use precompiled Python files?
我正在使用 uWSGI 来部署我的 WSGI 应用程序。 Python 文件是针对每个请求编译的,还是只预编译一次?我没有看到任何 .pyc
个文件。
如果您使用的是 CPython
,那么默认情况下,不会在每次收到请求时编译它,除非您手动配置它来执行此操作。
根据第一个请求,uWSGI
将加载 python 脚本 bytecode
并将在我知道的 2 种不同情况下重新加载它:
- 有一个之前没有加载的新导入(只会解析新模块并转换为字节码)。
- 你明确地运行
service uwsgi restart
然而,仍然有一种方法可以通过解释器抑制在每个请求中重新加载 python 脚本,例如:python -B my_amazing_view.py
更多详情请点击这里:
- What is pycache
- Should I generate
.pyc
Python 缓存模块字节码 - 直接在 python2.x 的相同位置,在 python3 的 __pycache__
子文件夹下 - 但脚本(区别在于用法 -如果你导入它它是一个模块,如果你执行它它是一个脚本)总是被重新编译(这就是为什么主脚本通常非常非常短的简单)。
IOW,您的主要 wsgi 脚本将为每个新服务器进程重新编译一次。通常情况下,wsgi 应用程序作为一个长 运行 进程提供服务,它将处理多个请求,因此即使这样初始编译开销也不是问题(短脚本 + 每个进程只编译一次)...
此外,一旦 Python 进程启动,导入的模块就会缓存在内存中,因此每个进程只真正导入(加载)一次。
请注意,进程所在的用户 运行 必须对您的应用程序目录具有写入权限才能创建 .pyc 文件...当然还有对 .pyc 文件的读取权限.
我正在使用 uWSGI 来部署我的 WSGI 应用程序。 Python 文件是针对每个请求编译的,还是只预编译一次?我没有看到任何 .pyc
个文件。
如果您使用的是 CPython
,那么默认情况下,不会在每次收到请求时编译它,除非您手动配置它来执行此操作。
根据第一个请求,uWSGI
将加载 python 脚本 bytecode
并将在我知道的 2 种不同情况下重新加载它:
- 有一个之前没有加载的新导入(只会解析新模块并转换为字节码)。
- 你明确地运行
service uwsgi restart
然而,仍然有一种方法可以通过解释器抑制在每个请求中重新加载 python 脚本,例如:python -B my_amazing_view.py
更多详情请点击这里:
- What is pycache
- Should I generate
.pyc
Python 缓存模块字节码 - 直接在 python2.x 的相同位置,在 python3 的 __pycache__
子文件夹下 - 但脚本(区别在于用法 -如果你导入它它是一个模块,如果你执行它它是一个脚本)总是被重新编译(这就是为什么主脚本通常非常非常短的简单)。
IOW,您的主要 wsgi 脚本将为每个新服务器进程重新编译一次。通常情况下,wsgi 应用程序作为一个长 运行 进程提供服务,它将处理多个请求,因此即使这样初始编译开销也不是问题(短脚本 + 每个进程只编译一次)...
此外,一旦 Python 进程启动,导入的模块就会缓存在内存中,因此每个进程只真正导入(加载)一次。
请注意,进程所在的用户 运行 必须对您的应用程序目录具有写入权限才能创建 .pyc 文件...当然还有对 .pyc 文件的读取权限.