1)我已经读过,如果我在python中导入线程模块,CPU绑定加载将不会从使用此库中获得太多好处,因为GIL强制线程一次运行1,即使我在多个上运行代码核心机器。如果是这种情况,使用Python的线程库会使哪种代码受益?
2)如果是线程库的情况,那么并行执行CPU密集型任务,例如两个信号的互相关,多处理模块是最好的模块吗?
为了使这更具体,让我们说我要并行化的任务是以下代码中的for循环,而我的机器只有12个核心。假设我的模板长度为~1000,我的图像长度为~2000,我有〜1000个信号要进行排序:
import numpy as np
###2-D array of shape (points, signals)
signals = np.load('signals.npy')
###1-D template array for cross correlation
templateSignal = np.load('template.npy')
for s in range(signals.shape[2]):
xcorr = np.correlate(templateSignal, signal[:,s])
答案 0 :(得分:2)
即使使用GIL,Python中的线程也很有用,因为输入/输出操作不会阻止程序。您可以在等待磁盘操作完成或等待网络事件时执行操作。
线程也在GUI应用程序中发挥作用,程序可以在后台执行计算时保持对用户输入的响应(感谢@FogleBird)
对于2),您认为可以使用multiprocessing
模块将CPU密集型程序扩展到多个核心,这是正确的。注意流程之间的通信成本。