Python是编译器吗,python是用什么编译程序
进程间通信有信号、流水线、信息队列、信号量、共享存储器、插口等各种方式,本文使用大蟒模块内存映射进行进程间通信的演示。
地图模块支持窗子和Unix操作系统操作系统系统,但存在差异,并为不同的操作系统提供不同的构造函数。本文在窗子环境下进行。因此,我们将只介绍如何在窗子上使用共享内存进行进程间通信。
您可以命名窗子共享内存,并且在当前环境中所有进程都可以访问共享内存窗户。上的内存映射构造函数声明如下:
classmmap.mmap(文件号,长度[,标记名[,访问[,偏移量]]))
对于共享内存,映射到菲莱诺参数表的文件将传递-1,长度参数表上的内存大小,我们的实例为1024(1k)。标记名参数是共享内存的名称,我们将它命名为共享_mmap ,以便其他进程共享100 .准入参数用于限制对共享内存的访问,其值可以是访问读、访问写或访问_复制
本文的示例创建两个应用应用程序。一个向共享内存写入字符串,另一个进程读取共享内存的内容。为了方便起见,这里使用Tkinter Gui框架。它内置在大蟒中,因此不需要安装夸脱或简介等第三方图像使用者界面库。代码是写入共享内存的应用应用程序。
# write_app.py
导入地图
来自图形界面导入*
类写应用程序:
mmap _ file=无
def __init__(self,master):
self.master=主人
self.master.title(mmapdemo))。
FRM=frame(self.master))。
frm.pack())
self.open_Button=Button(FRM,text=创建一个mmap ,command=self.create_mmap))。
自我。打开按钮。pack(side=left))))))))。
self.close_Button=Button(FRM,text=关闭一个mmap ,状态=禁用,command=self.close_mmap))。
自我。关闭按钮。pack(side=left))))))))。
self.text=条目(frm)
self.text.pack(侧=底) )。
self.text.bind(,self.write_text))。
(状态=禁用).
efcreate_mmap(self):
self.mmap _ file=mmap.mmap (0,1024,access=mmap .ACCESS_WRITE,tagname=share_mmap ))。
自我。关闭按钮。配置(状态=活动).
self.open _ button.config(状态=禁用)).
self.text.config(状态=正常)).
efclose_mmap(self):
self.close _ button.config(状态=禁用)).
自我。打开按钮。配置(状态=活动).
(状态=禁用).
self.mmap_file.close(
efwrite_text(self,event):
txt=self.text.get(
self.mmap_file.write(txt)
self.text.delete(0,len ) txt))
if __name__==__main__ :
root=Tk()
APP=写应用程序(根)).
根。主循环(
将上述代码保存到write_app.py文件并运行,可以获得以下效果:
单击创建一个 mmap 创建名为共享_mmap 的共享内存,并在右侧的输入框中输入你好世界!框中键入名称。然后"回车里",那么"你好世界!"这句话被写入共享存储器。
要从另一个进程查看共享内存中的数据,请使用以下ReadApp指示从分享_mmap共享内存中读取数据,并将以下代码保存在read_app.py文件中:
# read_app.py
导入地图
类ReadApp:
mmap _ file=无
def __init__(self,master):
self.master=主人
self.master.title(读mmap))。
FRM=frame(self.master))。
frm.pack())
自我Refresh_Button=Button(FRM,text=刷新内存映射内容,command=self.refresh_mmap))。
自我。刷新按钮。包装(侧面=顶部))。
self.text_variable=StringVar(
self.text=label(FRM、文本变量=self.text _ variable))。
self.text.pack(侧=底) )。
efrefresh_mmap(self):
如果不是self.mmap_file:
self.mmap _ file=mmap.mmap (-1,1024,access=mmap .ACCESS_READ,tagname=share_mmap )。
self.mmap_file.seek(0))。
自我。文本变量。设定(自我。mmap _ file。读取线()
if __name__==__main__ :
root=Tk()
APP=readapp (root))
根。主循环(
运行read_app.py文件,点击“刷新mmap内容”按钮,然后点击“hello world!显示" "。该数据已从共享内存中读取。具有以下效果:
本文中的代码组织在一个文件share_mm_demo.py中,从命令行share_mm_demo.py写入内存的过程在运行时执行,这个操作在命令行share _ mm _ py中执行。
共享给:
2013-03-22 18:32
看745。
评论
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。