我有一個腳本必須在許多文件上運行。在每個文件中都有執行生成不同文件的外部命令,或者我需要在不同文件夾中的相同文件中操作。線程優化。在文件列表上運行許多命令
我想有這樣的事情:
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 ...
謝謝對於這個如此通用的問題感到抱歉。