最近做一个项目,需要从一个Python文件里执行其他的Python文件,因为数量可能有点大,所以考虑了一下性能的问题,就去简单地测试了一下其效率,结果如下:
首先,我的另一个Python文件test1.py
里内容如下,执行一条command命令
import os
os.putenv('PATH', 'C:\\Program Files (x86)\\Git\\bin') # 我的ls命令在git下面
os.system('ls -ls')
1.使用exec函数
在Python3中无法直接使用execfile()函数,execfile被分解为了open()和exec(),详见文档,必须先将文件打开,再把文件浏览当作参数传入exec函数中去。代码如下:
import os
for time in range(0, 1000):
fp = open('test1.py')
exec(fp.read(), None, None)
#os.popen('ls -l')
执行一千次该文件,结果如下:内存几乎无变化,CPU使用率62\%左右,耗时86.3s
2.使用os.popen()函数
os模块的popen()函数是相当于执行的是一条command命令,并可以通过read()方法获取命令的输出,代码如下:
import os
for time in range(0, 1000):
fp = open('test1.py')
#exec(fp.read(), None, None)
os.popen('ls -l')
执行一千次该循环,结果如下:内存几乎无变化,CPU使用率90\%左右,耗时118.1s

3.结果
从上面很明显的就能发现,使用Python3里面的exec不仅占用CPU率较低,并且执行时间也较快,而在占用内存方面两者几乎都一样。所以,还是使用exec吧。
4.扩展
顺便测试了一下使用os.system()函数和os.popen()函数的区别,当然这里的测试是在单个文件里执行一千次该命令,如下:
import os
os.putenv('PATH', 'C:\\Program Files (x86)\\Git\\bin') # 我的ls命令在git下面
for time in range(0, 1000):
os.system('ls -l')
# os.popen('ls -l')
os.system()的结果:CPU占用65\%左右,内存几乎不变,耗时83.5s
os.popen()的结果:CPU占用90\%左右,内存几乎不变,耗时38.4s