相关疑难解决方法(0)

多处理:如何在多个进程之间共享一个字典?

一个程序,它创建可在可连接队列上工作的多个进程Q,并最终可能操纵全局字典D来存储结果.(因此每个子进程可用于D存储其结果,并查看其他子进程正在生成的结果)

如果我在子进程中打印字典D,我会看到已对其进行的修改(即在D上).但是在主进程加入Q之后,如果我打印D,那就是空的dict!

我知道这是一个同步/锁定问题.有人能告诉我这里发生了什么,以及如何同步访问D?

python multiprocessing

98
推荐指数
4
解决办法
7万
查看次数

是否将共享只读数据复制到不同进程以进行多处理?

我看到的那段代码看起来像这样:

glbl_array = # a 3 Gb array

def my_func( args, def_param = glbl_array):
    #do stuff on args and def_param

if __name__ == '__main__':
  pool = Pool(processes=4)
  pool.map(my_func, range(1000))
Run Code Online (Sandbox Code Playgroud)

有没有办法确保(或鼓励)不同的进程没有获得glbl_array的副本但共享它.如果没有办法停止复制,我将使用memmapped数组,但我的访问模式不是很规律,所以我希望memmapped数组更慢.以上似乎是第一个尝试的事情.这是在Linux上.我只是想从Stackoverflow获得一些建议,并且不想惹恼系统管理员.你认为它会帮助,如果第二个参数是像一个真正的不可变对象glbl_array.tostring().

python numpy multiprocessing

52
推荐指数
3
解决办法
4万
查看次数

标签 统计

multiprocessing ×2

python ×2

numpy ×1