Python 3.x Python:从不同线程运行多个子进程速度很慢

Python 3.x Python:从不同线程运行多个子进程速度很慢,python-3.x,subprocess,python-multithreading,Python 3.x,Subprocess,Python Multithreading,我有一个程序,有一个进程,可以启动很多线程。 每个线程都可以使用subprocess.Popen来运行一些命令。 我看到运行命令的时间随着线程数的增加而增加。 例如: 有没有另一种方法可以并行执行单个进程中的大量命令,而不会降低性能?Python的线程当然是并发的,但它们并不是真正并行运行的,因为。因此,它们不适用于CPU受限的应用程序。如果您需要真正地并行化某些东西并允许它在所有CPU内核上运行,那么您将需要使用多个进程。下面是一个很好的答案,更详细地讨论了这一点: 对于上面的示例,这可能是一

我有一个程序,有一个进程,可以启动很多线程。 每个线程都可以使用subprocess.Popen来运行一些命令。 我看到运行命令的时间随着线程数的增加而增加。 例如:


有没有另一种方法可以并行执行单个进程中的大量命令,而不会降低性能?

Python的线程当然是并发的,但它们并不是真正并行运行的,因为。因此,它们不适用于CPU受限的应用程序。如果您需要真正地并行化某些东西并允许它在所有CPU内核上运行,那么您将需要使用多个进程。下面是一个很好的答案,更详细地讨论了这一点:

对于上面的示例,这可能是一个不错的选择(请注意,此模块中还有一个
ThreadPool

来自multiprocessing.pool导入池的

导入子流程
导入时间
def foo(*args):
s=时间。时间()
subprocess.Popen('ip链接显示'.split(),stdout=subprocess.PIPE,stderr=subprocess.PIPE,universal_newlines=True)。communicate()
return time.time()-s
如果名称=“\uuuuu main\uuuuuuuu”:
将池(10)作为p:
结果=p.map(foo,范围(10))
打印(结果)
# [0.018695592880249023, 0.009021520614624023, 0.01150059700012207, 0.02113938331604004, 0.014114856719970703, 0.01342153549194336, 0.011168956756591797, 0.014746427536010742, 0.013572454452514648, 0.008752584457397461]
结果=p.map_异步(foo,范围(10))
打印(result.get())
# [0.00636744499206543, 0.011589527130126953, 0.010645389556884766, 0.0070612430572509766, 0.013571739196777344, 0.009610414505004883, 0.007040739059448242, 0.010993719100952148, 0.012415409088134766, 0.0070383548736572266]

但是,如果您的函数与示例中的函数相似,因为它主要只是启动其他进程,而不进行大量计算,那么我怀疑并行化它会有很大的不同,因为子进程已经可以并行运行了。可能是由于所有这些进程(可能是CPU使用率很高,或者在短时间内尝试了太多磁盘读/写),导致整个系统暂时无法正常工作,从而导致速度减慢。我建议在运行程序时仔细查看系统资源(任务管理器等)。

也许它与python无关:打开一个新shell=打开一个新文件,因为linux上的所有内容基本上都是一个文件

查看使用此命令打开文件的限制(默认值为1024):

并尝试使用此命令提高它,以查看您的代码是否更快:

ulimit -n 2048
ulimit
ulimit -n 2048