uWSGI是否使用预编译的Python文件?

问题描述 投票:2回答:2

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

python uwsgi wsgi
2个回答
2
投票

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

IOW,您的主要wsgi脚本将针对每个新服务器进程重新编译一次。通常,wsgi应用程序作为一个长时间运行的进程,它将处理多个单个请求,所以即使这样,初始编译开销实际上也不是问题(短脚本+每个进程只编译一次)...

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

请注意,运行进程的用户必须具有应用程序目录的写权限才能创建.pyc文件...当然也可以读取.pyc文件的权限。


1
投票

如果您正在使用CPython然后默认情况下,除非您手动配置它以执行此操作,否则每次收到请求时都不会编译。

根据第一个请求,uWSGI将加载python脚本bytecode并将在我知道的两种不同场景中重新加载它:

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

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

有关详细信息,请访问:

  1. What is pycache
  2. Should I generate .pyc
© www.soinside.com 2019 - 2024. All rights reserved.