Python 多线程和多处理加速循环
Python multithreading and multiprocessing to speed up loops
我用 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 完成我正在做的事情需要 +5 分钟
我用 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 完成我正在做的事情需要 +5 分钟