使用线程/线程模块python 2.7的好处

时间:2012-07-19 19:55:29

标签: python

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])

1 个答案:

答案 0 :(得分:2)

即使使用GIL,Python中的线程也很有用,因为输入/输出操作不会阻止程序。您可以在等待磁盘操作完成或等待网络事件时执行操作。

线程也在GUI应用程序中发挥作用,程序可以在后台执行计算时保持对用户输入的响应(感谢@FogleBird)

对于2),您认为可以使用multiprocessing模块将CPU密集型程序扩展到多个核心,这是正确的。注意流程之间的通信成本。