Python多线程和多处理可加速循环

时间:2019-12-09 10:44:21

标签: python multithreading multiprocessing python-multiprocessing python-multithreading

我用4个for循环实现了函数,并且计算时间很长,所以我试图通过使用多线程来加快速度。

我的功能如下:

task_five

在多线程中,我尝试了以下方法:

def loops(start, end):  
    for h in range(start, end):
        for w in range(0, width):
            for h2 in range(h-radius, h+radius):
                for w2 in range(w-radius, w+radius):
                    compute_something()

如果我只使用0-300的主线程,则计算时间不会改变

我还使用了Joblib多重处理:

t1 = threading.Thread(target=loops, args=(0, 150))
t2 = threading.Thread(target=loops, args=(150, 300))
t1.start()
t2.start()
t1.join()
t2.join()

在这种情况下,计算时间甚至更长

我做错了什么,还是有其他方法通过多线程加速循环?
范围仅是一个示例,循环的大小通常为2000 * 1800 * 6 * 6,这需要+5分钟才能完成我正在做的事情

1 个答案:

答案 0 :(得分:2)

由于GIL,使用多线程在python中不会获得任何加速。这是解释器的互斥量。您需要使用多处理程序包。它包含在标准发行版中。

from multiprocessing import Pool

pool = Pool()

然后仅使用mapstarmap。您可以找到文档here。但是首先要考虑是否可以使用numpy对代码进行矢量化,这样会更快。