2017-08-29 69 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 ...

謝謝對於這個如此通用的問題感到抱歉。

回答