是否可以在所有可用的CPU上启动多个线程而不是一个?一个示例代码会很棒。
或者,我可以跨越多个流程,然后在每个流程中创建多线程吗?
我正在使用多线程,它适用于我脚本的IO端。但是,我的脚本也很昂贵,所以我想在多个CPU上启动多个线程。
我的代码流程:
def worker(url):
extract url (io bound)
process url content (cpu bound)
处理此类工人的有效方法应该是什么?
答案 0 :(得分:1)
是否可以在所有可用的CPU上启动多个线程而不是一个?
通常,线程在任何可用的CPU上运行。除非您指定了在特定CPU上运行的线程/进程。 (如何完成此操作因操作系统而异)
但是,如果您使用python.org(“CPython”)中的Python实现,则无关紧要。 CPython有一个“全局解释器锁”,强制执行,一次只有一个线程正在执行Python字节码。因此,使用线程不会提高CPython的处理性能。
因此,对于计算量很大的任务,您应该使用multiprocessing
模块在不同的进程中执行它。如果对大量数据进行相同的工作,使用multiprocessing.Pool
通常是一个好主意。