从多个处理器访问共享数组



问题:

我想在所有过程中访问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)

相关内容

  • 没有找到相关文章

最新更新