2017-08-29 38 views
0

我有一个脚本必须在许多文件上运行。在每个文件中都有执行生成不同文件的外部命令,或者我需要在不同文件夹中的相同文件中操作。线程优化。在文件列表上运行许多命令

我想有这样的事情:

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.1Proc2.2可以在同一时间运行。

此外,我需要限制同时运行的进程数量,主要用于Proc2.2Proc3.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 ...

谢谢对于这个如此通用的问题感到抱歉。

回答