0

是否可以在所有可用的CPU上启动多个线程而不是一个?示例代码会很棒。如何处理并行性环境中同时绑定的IO和CPU?

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

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

我的代码流:

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

应该用什么来处理这种类型的工作人员的有效途径?

+0

可能的重复[了解python GIL - I/O绑定vs CPU绑定](https://stackoverflow.com/questions/23574367/understanding-python-gil-io-bound-vs-cpu-bound) – Netwave

+0

基本上你不能,看看https://stackoverflow.com/a/1294402/1695172 – Netwave

+0

你必须使用多处理,由于GIL – Metareven

回答

1

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

通常,线程运行在任何可用的CPU上。除非你指定了一个线程/进程在特定的CPU上运行。 (如何完成每个操作系统)

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

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