Python 多线程和多处理以加快循环速度



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

我的函数如下所示:

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

使用多线程,我尝试了这个:

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

如果我只使用0-300的主线程,计算时间没有变化

我还使用了像这样的 joblib 多处理:

inputs = range(300)
Parallel(n_jobs=core_num)(delayed(loops)(i) for i in inputs)

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

我做错了什么还是有其他方法可以通过多线程来启动循环?
范围这里只是一个例子,循环的大小通常为 2000*1800*6*6 A 需要 +5 分钟才能完成我正在做的事情

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

from multiprocessing import Pool
pool = Pool()

然后只需使用mapstarmap.您可以在此处找到文档。但是首先考虑是否可以使用numpy对代码进行矢量化,这样会更快。

相关内容

  • 没有找到相关文章

最新更新