我正在使用uWSGI来部署我的WSGI应用程序。是为每个请求编译Python文件,还是预编译一次?我没有看到任何.pyc
文件。
Python缓存模块字节码 - 直接在python2.x的相同位置,在python3的__pycache__
子文件夹下 - 但脚本(不同之处在于使用 - 如果你导入它是一个模块,如果你执行它是一个脚本)总是被重新编译(这就是为什么主要脚本通常非常简短)。
IOW,您的主要wsgi脚本将针对每个新服务器进程重新编译一次。通常,wsgi应用程序作为一个长时间运行的进程,它将处理多个单个请求,所以即使这样,初始编译开销实际上也不是问题(短脚本+每个进程只编译一次)...
此外,一旦启动Python进程,导入的模块将缓存在内存中,因此每个进程只会导入(加载)一次。
请注意,运行进程的用户必须具有应用程序目录的写权限才能创建.pyc文件...当然也可以读取.pyc文件的权限。
如果您正在使用CPython
然后默认情况下,除非您手动配置它以执行此操作,否则每次收到请求时都不会编译。
根据第一个请求,uWSGI
将加载python脚本bytecode
并将在我知道的两种不同场景中重新加载它:
service uwsgi restart
然而,仍然有一种方法可以通过解释器来抑制它,从而在每个请求中继续重新加载python脚本,例如:python -B my_amazing_view.py
有关详细信息,请访问: