问题:
我想在所有过程中访问y共享变量,因为对于new_y中的每个元素,我想成为当前y和下一个y像new_y [i] = y [i] y [i 1]之类的东西。我如何获得当前泳池工人所发送的阵列y的索引?
import multiprocessing
num_processes = 2
y = multiprocessing.Array('d', 6, lock=False)
new_y = multiprocessing.Array('d', 6, lock=False)
def init_process(y_to_share, new_y_to_share):
global y, new_y
y = y_to_share
new_y = new_y_to_share
process_pool = multiprocessing.Pool(
num_processes,
initializer=init_process,
initargs=(y, new_y))
dt = 0.0001
def sq():
global y
global new_y
print new_y[0]
print multiprocessing.current_process()
#Here I want to do y at the current index and add the y value of the next index
#something like new_y[i] = y[i]+y[i+1]
process_pool.map(sq, y)
我不愿回答,因为我可能完全误解了这个问题,但是您可以通过更改父程过程中的迭代来解决此问题,以便它具有您的相邻数据想要。
import multiprocessing
def worker(yvals):
return yvals[0] + yvals[1]
if __name__ == "__main__":
y_list = list(range(6))
pool = multiprocessing.Pool()
new_y = list(pool.map(worker,
(y_list[i:i+2] for i in range(len(y_list)-1))))
pool.close()
print(new_y)
在Linux上,当池启动时,它具有对父地址空间的复制视图,并且可以读取列表。我不确定在Windows上会发生什么,但是它试图腌制父环境并用它初始化孩子 - 让我想知道为什么有人会在Windows上使用此模块! - 但是至少对于Linux和OSX,这将起作用
import multiprocessing
def worker(y_index):
return y_list[y_index] + y_list[y_index+1]
if __name__ == "__main__":
y_list = list(range(6))
pool = multiprocessing.Pool()
new_y = list(pool.map(worker, range(len(y_list)-1)))
print(new_y)