如何在并行环境中同时处理IO和CPU绑定?

时间:2017-08-25 11:53:02

标签: python python-2.7 python-multiprocessing python-multithreading concurrent.futures

是否可以在所有可用的CPU上启动多个线程而不是一个?一个示例代码会很棒。

或者,我可以跨越多个流程,然后在每个流程中创建多线程吗?

我正在使用多线程,它适用于我脚本的IO端。但是,我的脚本也很昂贵,所以我想在多个CPU上启动多个线程。

我的代码流程:

def worker(url):
    extract url (io bound)  
    process url content (cpu bound)

处理此类工人的有效方法应该是什么?

1 个答案:

答案 0 :(得分:1)

  

是否可以在所有可用的CPU上启动多个线程而不是一个?

通常,线程在任何可用的CPU上运行。除非您指定了在特定CPU上运行的线程/进程。 (如何完成此操作因操作系统而异)

但是,如果您使用python.org(“CPython”)中的Python实现,则无关紧要。 CPython有一个“全局解释器锁”,强制执行,一次只有一个线程正在执行Python字节码。因此,使用线程不会提高CPython的处理性能。

因此,对于计算量很大的任务,您应该使用multiprocessing模块在​​不同的进程中执行它。如果对大量数据进行相同的工作,使用multiprocessing.Pool通常是一个好主意。