首页 > 编程知识 正文

python编译器,什么是编程

时间:2023-05-05 12:58:44 阅读:149852 作者:384

进程间通信有信号、流水线、信息队列、信号量、共享存储器、插口等各种方式,本文使用python模块mmap进行进程间通信的演示。

map模块支持windows和Unix系统,但存在差异,并为不同的操作系统提供不同的构造函数。 本文在windows环境下进行。 因此,我们将只介绍如何在windows上使用共享内存进行进程间通信。

您可以命名windows共享内存,并且在当前环境中所有进程都可以访问共享内存。 windows上的mmap构造函数声明如下:

classmmap.mmap(Fileno,length[,tagname[,access[,offset]]] ) )

对于共享内存,映射到fileno参数表的文件将传递-1,length参数表上的内存大小,我们的实例为1024(1k )。 tagname参数是共享内存的名称,我们将它命名为" share_mmap ",以便其他进程共享。 access参数用于限制对共享内存的访问,其值可以是ACCESS_READ、ACCESS_WRITE或ACCESS_COPY

本文的示例创建两个APP应用程序。 一个向共享内存写入字符串,另一个进程读取共享内存的内容。 为了方便起见,这里使用Tkinter Gui框架。 它内置在python中,因此不需要安装QT或wxPython等第三方GUI库。 代码是写入共享内存的APP应用程序。

# write_app.py

导入地图

来自tkinter import *

类写app :

mmap_file=None

def __init__(self,master ) :

self.master=master

self.master.title(mmapdemo ) )。

FRM=frame(self.master ) )。

frm.pack () )

self.open_Button=Button(FRM,text='Create a mmap ',command=self.create_mmap ) ) )。

self.open _ button.pack (side=left ) ) ) ) ) )。

self.close_Button=Button(FRM,text='Close a mmap ',state=DISABLED,command=self.close_mmap ) )。

self.close _ button.pack (side=left ) ) ) ) ) )。

self.text=Entry(frm )

self.text.pack(side=Bottom ) )。

self.text.bind (',self.write_text ) )。

self.text.config (state=disabled ) )。

efcreate_mmap(self ) :

self.mmap _ file=mmap.mmap (0,1024,access=mmap.ACCESS_WRITE,tagname='share_mmap ' ) ) ) )。

self.close _ button.config (state=active ) )。

self.open _ button.config (state=disabled ) )。

self.text.config(state=normal ) )。

efclose_mmap(self ) :

self.close _ button.config (state=disabled ) )。

self.open _ button.config (state=active ) )。

self.text.config (state=disabled ) )。

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=写应用程序(root ) )。

root.mainloop (

将上述代码保存到write_app.py文件并运行,可以获得以下效果:

单击" Create a mmap "创建名为" share_mmap "的共享内存,并在右侧的输入框中输入" hello world! 框中键入名称。 然后“回车里”,那么“hello world! ”这句话被写入共享存储器。

要从另一个进程查看共享内存中的数据,请使用以下ReadApp指示从share_mmap共享内存中读取数据,并将以下代码保存在read_app.py文件中:

# read_app.py

导入地图

class ReadApp:

mmap_file=None

def __init__(self,master ) :

self.master=master

self.master.title (读mmap ) )。

FRM=frame(self.master ) )。

frm.pack () )

self.Refresh_Button=Button(FRM,text='Refresh mmap content ',command=self.refresh_mmap ) )。

self.refresh _ button.pack (side=top ) ) )。

self.text_variable=StringVar (

self.text=label(FRM,text variable=self.text _ variable ) )。

self.text.pack(side=Bottom ) )。

efrefresh_mmap(self ) :

if not self.mmap_file:

self.mmap _ file=mmap.mmap (-1,1024,access=mmap.ACCESS_READ,tagname='share_mmap ' ) )。

self.mmap_file.seek(0) )。

self.text _ variable.set (self.mmap _ file.readline ()

if __name__=='__main__':

root=Tk ()

APP=readapp (root ) )

root.mainloop (

运行read_app.py文件,单击" Refresh mmap content "按钮,在按钮下单击" hello world! 显示“”。该数据已从共享存储器中读取。 具有以下效果:

本文中的代码组织在一个文件share_mm_demo.py中,在运行时执行从命令行share_mm_demo.py写入内存的过程,并在命令行share _ mm _ py中执行此操作

共享至:

2013-03-22 18:32

看745

评论

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。