gpt4 book ai didi

使用共享 numpy 数组进行 Python 多处理

转载 作者:太空宇宙 更新时间:2023-11-03 15:35:50 38 4
gpt4 key购买 nike

假设我创建了一个对象 A,其属性为二维 numpy 数组。然后我使用 Process API 创建了 10 个线程来随机设置 A 的行。

我想知道我是否编写了以下代码,self.x是否在所有进程(线程)之间共享,或者每个进程(线程)只有一个副本?

如果不共享,我将丢失所有更新,对吧?

import numpy as np
from multiprocessing import Process

class A:

def __init__():
self.x = np.zeros((3,4))

def update():
threads = []
for i in range(10):
trd = Process(target=self.set, args=(i,))
threads.append(trd)
trd.start()

for i in range(10):
threads[i].join()

def set(i):
self.x[i/3] = np.random.rand(1,4)


if ___main___:
a = A()
a.update()

最佳答案

不,它没有共享。您生成多个进程,每个进程复制父进程的文件描述符,并且没有共享对象。

要创建共享的共享变量,您可以使用 ctype对象。

因此,不要将数组声明为 -

self.x = np.zeros((3,4))

你可以使用这个 Array 来声明它-

from multiprocessing import Array
self.x = Array('i', [0]*10)

如果您仍然想让 numpy 数组成为共享数组,请看看这个很棒的 answer .

这里需要注意的是,这可能并不那么容易。您还必须锁定共享数组以避免任何竞争条件。

关于使用共享 numpy 数组进行 Python 多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42518609/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com