如何在并行上下文中同时处理 IO 和 CPU 绑定?

How to deal with an IO and CPU bound at the same time in the context of parallelism?

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

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

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

我的代码流程:

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

应对此类员工的有效方法应该是什么?

Is it possible launch multiple threads on all available CPUs rather than one?

一般来说,线程 运行 在任何可用的 CPU 上。除非您在特定 CPU 上指定了 thread/process 到 运行。 (具体操作方式因操作系统而异)

但是,如果您使用 python.org ("CPython") 中的 Python 实现,则没有关系。 CPython 有一个 "Global Interpreter Lock" 强制 一次只有一个线程正在执行 Python 字节码。因此,使用线程不会提高 CPython.

的处理性能

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