繁体   English   中英

如何在并行python进程中优化导入

[英]How to optimize imports in parallel python processes

让我们说我有一个处理文本json的python程序。 使用multiprocessing.Pool ,我将仔细检查成千上万个json文件; 这通常需要几天的时间。

我有两个脚本。 有一个master.py脚本可以生成进程。 产生的进程运行一个外部程序,并通过subprocess.run将结果通过管道传递到另一个python脚本。

otherProgram {args} | pipe.py {more args}

master.py不会直接产生pipe.py进程。 这是通过OS调用完成的,因此我导入master.py' are not shared with the imports required by pipe.py` master.py' are not shared with the imports required by

在48节点的计算机上,我并行运行了多达44个线程(即multiprocessing.Pool(44, maxtaskperchild = 10) )。

因此,关于导入过程,我有两个相关的问题:

  • 我可能会注意到,是否有什么方法可以导入大多数标准库以及一个带有一些辅助功能的自定义模块,从而对性能产生负面影响?

  • 如果是这样,是否有一种方法可以优化pipe.py进程的导入? 除了可以成千上万次导入osbinasciitarfile ,还有其他方法可以使同一组导入可用于多个进程吗?

我使用可执行脚本( import_stuff.py )测试了该脚本,该脚本具有与有问题的pipe.py相同的导入。

import subprocess, multiprocessing, datetime

def proc():
   subprocess.run(['/path/to/import_stuff.py', shell = True])
then = datetime.datetime.now()

for _ in range(1000):
   p.appy_async(proc)

p.close()
p.join()

delta = datetime.datetime.now() - then
print(delta)
  • 对于1000次迭代: 0:00:00.665622
  • 10000次迭代: 0:00:05.981406
  • 对于100000次迭代: 0:01:10.125345

由于程序的100,000次迭代要花几个小时才能运行,因此重复导入内容的开销不是很明显。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM