在部署时,我应该生成*.pyc文件吗?

16 浏览
0 Comments

在部署时,我应该生成*.pyc文件吗?

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

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

最近我开始思考这是否会对应用的性能产生任何实质性的影响,无论是在进程启动后的第一个页面视图,还是在其整个生命周期中始终如一地影响。

我是否应该在部署脚本中加入python -m compileall命令?

0
0 Comments

在部署时是否应该生成*.pyc文件?

问题的出现原因:

有人问是否在部署时生成.pyc文件,这是因为生成.pyc文件可能会对性能产生影响,但也可能对性能没有影响。有些人担心生成.pyc文件会影响首次或第n次页面加载的速度,因此提出了这个问题。

解决方法:

如果Flask/WSGI作为一个持久进程运行,那么生成.pyc文件不会对首次或第n次页面加载产生影响,因为在第一个页面请求之前,所有的Python模块已经被加载到内存中了。因此,唯一受影响的是服务器的启动时间。但是,如果每个页面请求都会启动一个新的Python进程,那么生成.pyc文件可能会对性能产生明显的影响,这时最好预编译文件。

另外,如果某个函数尝试导入一个尚未导入的模块,那么页面加载可能会受到影响。在这种情况下,需要解析并将模块转换为字节码,然后将其加载到内存中才能继续执行。

需要注意的是,对于使用venusian的项目(如pyramid),生成.pyc/.pyo文件将无效,因为venusian完全忽略这些文件。因此,对于这样的项目,生成.pyc文件可能会导致应用程序无法正常工作。

0