简体   繁体   English

在Python中将multiprocessing.Array转换为ctypes.c_void_p

[英]Convert multiprocessing.Array to ctypes.c_void_p in Python

I need to convert a multiprocessing.Array into a c_void_p . 我需要将multiprocessing.Array转换为c_void_p Currently this what I have: 目前,我所拥有的:

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)

What bothers me is that I first convert it into a Numpy array and then into a c_void_p. 让我困扰的是,我先将其转换为Numpy数组,然后转换为c_void_p。 Is there any way to remove the intermediate step? 有什么办法可以取消中间步骤?

Use ctypes.addressof : 使用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)

Output: 输出:

c_void_p(1552895115472)
c_void_p(1552895115472)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM