5

当开发 Python Web 应用程序 (Flask/uWSGI) 并在我的本地机器上运行它时,*.pyc文件由解释器生成。我的理解是,这些编译后的文件可以让加载更快,但不一定运行得更快。

当我将同一个应用程序部署到生产环境时,它在一个对本地文件系统没有写权限的用户帐户下运行。没有*.pyc提交到源代码控制的文件,并且在部署期间不努力生成它们。即使 Python 想.pyc在运行时写一个文件,它也做不到。

最近我开始想知道这是否对应用程序的性能有任何切实的影响,无论是在流程开始后的第一个页面浏览量方面,还是在其整个生命周期内始终如一。

我应该python -m compileall在部署脚本中加入吗?

4

1 回答 1

5

当然,您可以继续预编译为.pyc's,因为它不会伤害任何东西。

它会影响第一个或第 n 个页面加载吗?假设 Flask/WSGI 作为一个持久进程运行,一点也不。在请求第一页时,所有 Python 模块都已经加载到内存中(作为字节码)。因此,服务器启动时间将是唯一受未预编译文件影响的因素。

但是,如果由于某种原因为每个页面请求调用了一个新的 Python 进程,那么是的,(可能)在性能上会有明显的差异,并且预编译会更好。

正如克劳斯在上面的评论中所说,页面加载可能会受到影响的唯一其他时间是如果一个函数碰巧尝试导入一个尚未导入的模块。这将要求模块被解析并转换为字节码,然后加载到内存中,然后才能继续。

于 2016-02-25T05:41:25.443 回答