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