我无法使用多处理,我需要使用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")
答案 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
...