Python中的结构数组

时间:2018-05-03 21:17:54

标签: python-3.x ctypes mmap

我无法使用多处理,我需要使用python 3在Windows上的完全独立的python进程之间共享内存。我已经想出如何使用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")

1 个答案:

答案 0 :(得分:3)

你的people还不是一个数组,它仍然是一个类。为了拥有您的数组,您需要使用from_buffer()初始化该类,就像您之前使用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
...