共享内存指针

大家好, 我使用以下内容在Python中获得共享记忆. szname = c_char_p(name) hmapobject = windll.kernel32.createfilemappinga(invalid_handle_ value, 无,page_readonly,0,table_shmemsize,szname) if(hmapobject == 0): 打印" OpenKey:无法打开名称文件映射对象" 提高winerror() self.pdata = windll.kernel32.mapviewoffile(hmapobject, File_map_all_Access,0,0,table_shmemsize) 这似乎还可以. 如何在self.pdata中获取数据? 这是 假设是一系列浮标. 我认为MapViewOffile返回 指向数据. 这是我尝试的. Current_Time = 45.55 memcpy(current_time,self.pdata,4) 但是我有一个错误: 参数:参数1::不知道 如何转换参数1 我需要从self.pdata铸造我的浮点阵列. 任何 帮助您将不胜感激! 谢谢 蒂姆

# 回答1

蒂姆写道: 没有直接回答您的问题,为什么不使用 STDLIB MMAP模块,完全可以做到这一点 你在幕后? 文档-http://docs.python.org/lib/module-mmap.html 示例-http://aspn.activestate.com/aspn/coo.../recipe/413807 tjg
# 回答2

在9月10日上午10:11,蒂姆·戈尔登(Tim Golden)
# 回答3

在9月10日上午10:11,蒂姆·戈尔登(Tim Golden)
# 回答4

你好! 我同意 ; 在Windows MMAP上使用Memory-Mapping-File,他们使用虚拟 记忆. 并共享内存使用物理内存. 区别是操作系统不是python - - @-Salutations 米歇尔·克拉沃
# 回答5

蒂姆写道: 蒂姆,让我们尝试稍作备份. 据我了解,你 在Windows下运行,您想使用共享内存,大概是 在两个过程之间. 您知道CreateFileMapping/MapViewOffile API,可能来自MSDN [1]的示例,您想使用它 Windows *中的技术 *无 *显式文件备份. 我到目前为止对吗? 我建议使用MMAP模块,您似乎在上面拿起 并试图使用您的CTYPES解决方案 *和 * MMAP 模块作为相同机制的两半. 也许我误会了 但这就是外观. 然后,您问了一个有关抓住python对象的问题 内存地址可以将其传递到CTYPES解决方案中. (考虑到该解决方案的性质,这是有道理的). 您似乎错过的是您的CTYPES代码正在做 *准确* mmapmodule.c代码(这是实现) MMAP模块的幕后幕后为您做. 这是您的代码(非常重新格式化):
szname = c_char_p(name)  hmapobject = windll.kernel32.createfilempappinga(  invalid_handle_value,  没有任何,  page_readonly,  0,  table_shmemsize,  szname  )  if(hmapobject == 0):  打印" OpenKey:无法打开名称文件映射对象"  提高winerror()  self.pdata = windll.kernel32.mapviewoffile(  hmapobject,  file_map_all_access,  0,  0,  table_shmemsize  )
这是mmapmodule.c的代码(也重新格式化 并剪了):
m_obj-> map_handle = createfilemapping(  m_obj-> file_handle,  无效的,  flprotect,  size_hi,  size_lo,  m_obj-> tagname  );  if(m_obj-> map_handle!= null){  m_obj-> data =(char *)mapViewOffile(  m_obj-> map_handle,  dwdesiredaccess,  0,  0,  0  );
希望您能看到他们基本上也在做同样的事情 事物. (给定适当的参数). 唯一的 明确的差异是最终参数到MapViewOffile 在Python代码中为0,MSDN文档[2]表示该代码. "如果此参数为0(零),则映射扩展 从指定的偏移到文件映射的末尾." 尚不清楚如何适用于非文件支持 filemapping,但我 *假设 * Python Devs已经测试过 那. 简而言之,通过共享进行两个Python流程谈话 内存(不链接到特定文件)以下 为我工作:
导入mmap  #  #0特殊文件值可以为-1在Python 2.5中  #  shmem = mmap.mmap(0,1000," tjg",mmap.access_write)  shmem.write("等等")  </code-a>  <code-b>  导入mmap  shmem = mmap.mmap(0,1000," tjg",mmap.access_write)  打印shmem.read(9)
显然,我使用了虚拟代码和值,但是 .write和.read(以及其他辅助方法) 使用字符串, 您总是可以随时腌制或元帅任意 Python数据将其移动. 我希望这一切有帮助; 如果没有别的,它是给予的 我在阅读stdlib的代码时进行一些练习, 不好! TJG [1] http://msdn2.microsoft.com/en-us/library/aa366551.aspx [2] http://msdn2.microsoft.com/en-us/library/aa366761.aspx(_@_ _)

标签: python

添加新评论