这可能是一个微不足道的问题,但是我如何在python中并行化下面的循环呢?
# setup output lists
output1 = list()
output2 = list()
output3 = list()
for j in range(0, 10):
# calc individual parameter value
parameter = j * offset
# call the calculation
out1, out2, out3 = calc_stuff(parameter = parameter)
# put results into correct output list
output1.append(out1)
output2.append(out2)
output3.append(out3)
我知道如何在Python中启动单线程,但我不知道如何“收集”结果。
多个进程也是可以的-对于这种情况来说,只要是最简单的就行。我目前使用的是Linux,但代码应该也可以在Windows和Mac上运行。
并行化这段代码最简单的方法是什么?
发布于 2015-09-18 02:20:37
为了并行化一个简单的for循环,joblib为多处理的原始使用带来了很多价值。不仅是短小的语法,还有一些东西,比如当迭代非常快的时候透明地聚集迭代(以消除开销),或者捕获子进程的回溯,以获得更好的错误报告。
免责声明:我是joblib的原始作者。
发布于 2019-03-28 22:14:30
我发现joblib
对我非常有用。请参考以下示例:
from joblib import Parallel, delayed
def yourfunction(k):
s=3.14*k*k
print "Area of a circle with a radius ", k, " is:", s
element_run = Parallel(n_jobs=-1)(delayed(yourfunction)(k) for k in range(1,10))
N_job=-1:使用所有可用核心
发布于 2012-03-20 19:54:59
为什么不使用线程和一个互斥量来保护一个全局列表呢?
import os
import re
import time
import sys
import thread
from threading import Thread
class thread_it(Thread):
def __init__ (self,param):
Thread.__init__(self)
self.param = param
def run(self):
mutex.acquire()
output.append(calc_stuff(self.param))
mutex.release()
threads = []
output = []
mutex = thread.allocate_lock()
for j in range(0, 10):
current = thread_it(j * offset)
threads.append(current)
current.start()
for t in threads:
t.join()
#here you have output list filled with data
记住,你会像你最慢的线程一样快。
https://stackoverflow.com/questions/9786102
复制相似问题