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

时间:2019-03-05 10:03:07

标签: python uwsgi wsgi

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

2 个答案:

答案 0 :(得分:2)

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

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

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

请注意,正在运行该进程的用户必须对您的应用程序目录具有写许可权才能创建.pyc文件...当然还要对.pyc文件具有读许可权。

答案 1 :(得分:1)

如果您使用的是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