Python 中的结构数组
Array of Structs in Python
我不能使用多处理,我需要在 Windows 上使用 python 的完全独立的 python 进程之间共享内存 3. 我已经弄清楚如何使用 mmap 执行此操作,并且它工作得很好......当我使用简单的原始类型时。但是,我需要传递更复杂的信息。我找到了 ctypes.Structure,它似乎正是我需要的。
我想创建一个 ctypes.Structure 数组并更新该数组中的单个元素,将其写回内存并读取单个元素。
import ctypes
import mmap
class Person(ctypes.Structure):
_fields_ = [
('name', ctypes.c_wchar * 10),
('age', ctypes.c_int)
]
if __name__ == '__main__':
num_people = 5
person = Person()
people = Person * num_people
mm_file = mmap.mmap(-1, ctypes.sizeof(people), access=mmap.ACCESS_WRITE, tagname="shmem")
你的people
还不是一个数组,它仍然是一个class。为了拥有您的数组,您需要使用 from_buffer()
初始化 class,就像您之前使用 c_int
:
所做的那样
PeopleArray = Person * num_people
mm_file = mmap.mmap(-1, ctypes.sizeof(PeopleArray), ...)
people = PeopleArray.from_buffer(mm_file)
people[0].name = 'foo'
people[0].age = 27
people[1].name = 'bar'
people[1].age = 42
...
我不能使用多处理,我需要在 Windows 上使用 python 的完全独立的 python 进程之间共享内存 3. 我已经弄清楚如何使用 mmap 执行此操作,并且它工作得很好......当我使用简单的原始类型时。但是,我需要传递更复杂的信息。我找到了 ctypes.Structure,它似乎正是我需要的。
我想创建一个 ctypes.Structure 数组并更新该数组中的单个元素,将其写回内存并读取单个元素。
import ctypes
import mmap
class Person(ctypes.Structure):
_fields_ = [
('name', ctypes.c_wchar * 10),
('age', ctypes.c_int)
]
if __name__ == '__main__':
num_people = 5
person = Person()
people = Person * num_people
mm_file = mmap.mmap(-1, ctypes.sizeof(people), access=mmap.ACCESS_WRITE, tagname="shmem")
你的people
还不是一个数组,它仍然是一个class。为了拥有您的数组,您需要使用 from_buffer()
初始化 class,就像您之前使用 c_int
:
PeopleArray = Person * num_people
mm_file = mmap.mmap(-1, ctypes.sizeof(PeopleArray), ...)
people = PeopleArray.from_buffer(mm_file)
people[0].name = 'foo'
people[0].age = 27
people[1].name = 'bar'
people[1].age = 42
...