在开发Python Web应用程序(Flask / uWSGI)并在本地计算机上运行时,解释器会生成*.pyc
个文件。我的理解是这些编译的文件可以使加载更快,但不一定运行更快。
当我将此相同的应用程序部署到生产环境时,它会在对本地文件系统没有写入权限的用户帐户下运行。没有提交源代码控制的pyc文件,在部署期间也没有努力生成它们。即使Python想在运行时编写一个pyc文件,它也无法实现。
最近,我开始想知道这对应用程序的性能是否有任何实际影响,无论是在流程开始后的第一次网页浏览方面,还是在整个生命周期内始终如一。
我应该在部署脚本中抛出python -m compileall
吗?
答案 0 :(得分:4)
当然,你可以继续预编译到.pyc
,因为它不会伤害任何东西。
它会影响第一页或第n页的加载吗?假设Flask / WSGI作为持久进程运行,根本不运行。到第一页被请求时,所有Python模块都已经被加载到内存中(作为字节码)。因此,服务器启动时间将是唯一不受预编译文件影响的事情。
但是,如果由于某种原因为每个页面请求调用了一个新的Python进程,那么是的,可能(可能)在性能上会有明显的差异,并且预编译会更好。
正如Klaus在上面的评论中所说的那样,页面加载可能受到影响的唯一另一个时间是,如果某个函数尝试导入尚未导入的模块。这将需要解析模块并将其转换为字节码,然后在能够继续之前加载到内存中。