多处理 - 共享数组

Ved*_*nt7 6 python shared multiprocessing

所以我试图在 python 中实现多处理,我希望有一个并行运行方法的 4-5 个进程的池。这样做的目的是总共运行 1000 次 Monte 模拟(每个进程 250-200 次模拟)而不是运行 1000 次。我希望每个进程在完成处理后立即通过获取锁来写入公共共享数组一次模拟的结果,写入结果并释放锁。所以它应该是一个三步过程:

  1. 获取锁
  2. 写入结果
  3. 为等待写入数组的其他进程释放锁。

每次我将数组传递给进程时,每个进程都会创建该数组的副本,因为我想要一个公共数组,所以我不想要它。任何人都可以通过提供示例代码来帮助我吗?

Jul*_*ien 0

未经测试,但类似的东西应该可以工作。数组和锁在进程之间共享。

from multiprocessing import Process, Array, Lock

def f(array, lock, n): #n is the dedicated location in the array
    lock.acquire()
    array[n]=-array[n]
    lock.release()

if __name__ == '__main__':
    size=100
    arr=Array('i', [3,-7])
    lock=Lock()
    p = Process(target=f, args=(arr,lock,0))
    q = Process(target=f, args=(arr,lock,1))
    p.start()
    q.start()
    q.join()
    p.join()

    print(arr[:])
Run Code Online (Sandbox Code Playgroud)

这里的文档https://docs.python.org/3.5/library/multiprocessing.html有很多示例可以开始

  • 另外,默认情况下会创建一个[Array](https://docs.python.org/3/library/multiprocessing.html#multiprocessing.Array),并附加一个锁,您可以使用其“get_lock()”方法获取该锁,除非您想使用不同的锁类型,否则不需要显式分配它。然后主体就可以变成“with array.get_lock(): ...” (5认同)