簡體   English   中英

具有共享numpy數組的Python多處理

[英]Python multiprocessing with shared numpy array

假設我創建了一個具有2維numpy數組作為屬性的對象A。 然后,我使用Process API創建了10個線程來隨機設置A的行。

我想知道是否編寫以下代碼,是否在所有Process(線程)之間共享的self.x或每個Process(線程)都有一個副本?

如果不共享,我將丟失所有更新,對嗎?

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))

您可以使用此數組進行聲明-

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

如果仍然要將numpy數組設為共享數組,請查看此好答案

需要注意的是,這可能並不容易。 您還必須鎖定共享陣列,以避免出現任何競爭情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM