我正在使用Python 2.7。我有一个多线程程序,其中线程使用subprocess
模块启动命令。这些进程在系统上运行,并偶尔向线程报告数据。大多数工作都是在流程中完成的 - 例如,线程只从流程中获取信息并将它们写入文件。
我知道使用python进行多线程处理有一些限制。但在这种情况下,我预计所有繁重的工作都将由系统(Linux)完成,因为启动的子进程正在执行CPU密集型工作。因此线程不必承载任何负载,因此不应成为瓶颈。
我对在Python中一起使用线程和子进程的理解是否准确?我认为我理解的一个基本部分是这些不同的子进程可以在不同的核心上运行,因此即使线程绑定到一个核心,进程也会高效运行,并且线程可以在它们可用时从它们收集信息。 / p>
答案 0 :(得分:0)
为什么子进程本身不处理数据处理?将内容传递回进程需要额外的context switches以及序列化和反序列化的开销,如果您需要将大量工作传回主进程,这可能会变得非常重要。在子流程中使用线程可能更容易,而不是支付这个惩罚。
然而,有一些重要的事情需要注意。虽然I / O绑定代码(文件写入,在套接字上发送和接收数据等)不会遇到全局解释器锁定的瓶颈,但CPU绑定任务会。有关线程问题的详细信息,请参阅Jesse Noller's blog post on threads和the Python Wiki's article on the GIL。