转换多处理数组在Python中键入ctypes.c\u void\u p

2024-04-29 18:53:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要把multiprocessing.Array转换成c_void_p。目前我有:

shared_mem_bfr = multiprocessing.Array(c_uint8, img_width*img_height*3)
npyarr = np.frombuffer(shared_mem_bfr.get_obj(), c_uint8)
memory_buffer = npyarr.ctypes.data_as(c_void_p)

让我烦恼的是,我先把它转换成一个Numpy数组,然后再转换成一个c\u void\u p。有没有办法去掉中间的步骤?你知道吗


Tags: objimggetnpwidthmultiprocessingarraymem
1条回答
网友
1楼 · 发布于 2024-04-29 18:53:03

使用ctypes.addressof

import numpy as np
import multiprocessing as mp
import ctypes as c

shared_mem_bfr = mp.Array(c.c_uint8, 100)
print(c.c_void_p(c.addressof(shared_mem_bfr.get_obj())))

npyarr = np.frombuffer(shared_mem_bfr.get_obj(), c.c_uint8)
memory_buffer = npyarr.ctypes.data_as(c.c_void_p)
print(memory_buffer)

输出:

c_void_p(1552895115472)
c_void_p(1552895115472)

相关问题 更多 >