【发布时间】:2017-08-29 16:55:18
【问题描述】:
我有一个必须在许多文件上运行的脚本。在每个文件中都有生成不同文件的外部命令的执行,或者我需要在同一个文件中操作但在不同的文件夹中。
我会有这样的东西:
Proc1_File1 -> Proc2.1_File1 -> Proc2.2_File1 -> Proc3.File1 -> Proc4.File1
Proc1_File2 -> Proc2.1_File2 -> Proc2.2_File2 -> Proc3.File2 -> Proc4.File2
Proc1_FileN -> Proc2.1_File2 -> Proc2.2_FileN -> Proc3.FileN -> Proc4.FileN
所以在这个例子中我总共会有 5 个进程,但是例如 Proc2.1 和 Proc2.2 可以同时运行。
另外我需要限制同时运行的进程数,主要针对Proc2.2和Proc3.3,因为外部命令非常占用内存,所以同时运行超过4-5个进程可能会导致内存非常低。
抱歉这个问题太笼统了,但我不知道从哪里开始以及如何解决这个问题。好像我必须按顺序运行每个进程那样会很耗时。
所以,我认为我可能需要使用队列。我一直在使用列表限制外部命令的执行并等待,例如这里:
__list_commands.append(Popen(__command, shell=True, cwd=str(__p.parent)))
exit_codes = [p.wait() for p in __list_commands]
它将是运行第一个进程的函数的一部分。然而,这使得等待一个命令结束运行下一个,所以它按顺序运行,我想并行运行每个进程,并按顺序运行每个进程,首先是 proc1,然后是 proc2...
谢谢你,对这个如此笼统的问题感到抱歉。
【问题讨论】:
标签: python multithreading python-3.x subprocess