大家好!有一个main.py和几千个sub_x.py文件,main.py会频繁调用这几千个sub_x.py文件并获得返回结果。
但是现在问题是调用子程序的次数太频繁,导致main.py运行起来非常慢。
查看了耗时的地方,主要是下面这几个地方消耗时间:
{built-in method builtins.exec}
subprocess.py:372(run)
{built-in method _codecs.utf_8_encode}
{built-in method _pickle.load}
subprocess.py:586(init)
subprocess.py:952(_execute_child)
{built-in method _winapi.CreateProcess}
请问有什么方法可以在调用子程序的时候节约时间吗?
main.py的内容如下:
cmdLst = ['sub_1','sub_2','sub_3','sub_4']#实际上是有几千个sub_x.py文件,这里只列出4个
for i in range(len(cmdLst)):
#创建命令行内容
commandLine = 'python ' + cmdLst[i] + '.py'
#执行命令
proc = subprocess.run(commandLine.split(),stdout = subprocess.PIPE, stderr = subprocess.PIPE)
#获取子程序返回的内容
stdResult = proc.stdout.decode()
sub_x.py的内容如下:
print(stdLine)
首先看下硬件处理能力,然后代码考虑下优化,各种循环看看有没有提高性能的地方,考虑使用多线程试试,或者把调用很多的脚本压力分散开
你好!多线程的话会不会影响到sub_x.py文件执行的顺序?因为main.py要按照顺序执行sub_x.py文件的。
“调用很多的脚本压力分散开” 不是很懂,可不可以举一个例子?
@芽衣: main.py要按照顺序执行sub_x.py文件,那么久不建议使用多线程了,因为必须要等某一项功能完成,再开始下一项,没办法使用多线程,同时去处理几项任务,压力分散开,比如说你要跑10个任务,我可能每小时跑一个,这种解决方式,看看主程序逻辑是否有优化的地方,或者提高服务器硬件
@DanBrown: 谢谢你的热心回答~!
改C++
萨德撒多撒啊
可以使用协程啊,绝对的省时,而且占用系统资源还小