线程优化。在文件列表上运行许多命令
问题描述:
我有一个脚本必须在许多文件上运行。在每个文件中都有执行生成不同文件的外部命令,或者我需要在不同文件夹中的相同文件中操作。线程优化。在文件列表上运行许多命令
我想有这样的事情:
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 ...
谢谢对于这个如此通用的问题感到抱歉。
答
不知道,你需要一个过程。但以防万一看看这里: https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.ProcessPoolExecutor
或者也许你只需要简单的主题? https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor
记住,如果你产卵3个线程,他们将在同一个CPU在运行,如果他们的任务是计算密集型的,他们将分别使用CPU的33%。