uWSGI 使用预编译的 Python 文件吗?

Does uWSGI use precompiled Python files?

我正在使用 uWSGI 来部署我的 WSGI 应用程序。 Python 文件是针对每个请求编译的,还是只预编译一次?我没有看到任何 .pyc 个文件。

如果您使用的是 CPython,那么默认情况下,不会在每次收到请求时编译它,除非您手动配置它来执行此操作。

根据第一个请求,uWSGI 将加载 python 脚本 bytecode 并将在我知道的 2 种不同情况下重新加载它:

  1. 有一个之前没有加载的新导入(只会解析新模块并转换为字节码)。
  2. 你明确地运行service uwsgi restart

然而,仍然有一种方法可以通过解释器抑制在每个请求中重新加载 python 脚本,例如:python -B my_amazing_view.py

更多详情请点击这里:

  1. What is pycache
  2. Should I generate .pyc

Python 缓存模块字节码 - 直接在 python2.x 的相同位置,在 python3 的 __pycache__ 子文件夹下 - 但脚本(区别在于用法 -如果你导入它它是一个模块,如果你执行它它是一个脚本)总是被重新编译(这就是为什么主脚本通常非常非常短的简单)。

IOW,您的主要 wsgi 脚本将为每个新服务器进程重新编译一次。通常情况下,wsgi 应用程序作为一个长 运行 进程提供服务,它将处理多个请求,因此即使这样初始编译开销也不是问题(短脚本 + 每个进程只编译一次)...

此外,一旦 Python 进程启动,导入的模块就会缓存在内存中,因此每个进程只真正导入(加载)一次。

请注意,进程所在的用户 运行 必须对您的应用程序目录具有写入权限才能创建 .pyc 文件...当然还有对 .pyc 文件的读取权限.