是否可以使用numpy使用get_lock()锁定ctypes数组的columnor行?

时间:2013-01-20 23:36:58

标签: python numpy multiprocessing ctypes

是否可以使用get_lock()来锁定ctypes数组的列或行?

类似的东西:

lock = mp.Lock()
cArray = mp.Array(ctypes.c_int, 100*4, lock = lock)
numpyArray = np.frombuffer(cArray.get_obj())
numpyArray.shape = (100,4)

#In a function later called via multiprocessing.Process - for example
numpyArray[:,0].get_lock() #Also could be numpyArray.T[0].get_lock()

我知道可以锁定整个ctypes数组,但只是它的一部分。我知道数组的大小,它将保持不变,所以我可以计算ctypes数组中的偏移量,但是想知道 - 可以利用多处理锁的numpy切片的易用性吗?

1 个答案:

答案 0 :(得分:1)

如果您有lock,则可以锁定任何代码块:

with lock:
    numpyArray[:,0] = 1
    a += 2

Numpy数组没有关联的多处理锁。为拿到它,为实现它;您可以拨打cArray.get_lock()或仅将其作为变量lock传递。