国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python進程間通信之共享內(nèi)存詳解

2020-02-16 10:31:29
字體:
來源:轉載
供稿:網(wǎng)友

前一篇博客說了怎樣通過命名管道實現(xiàn)進程間通信,但是要在windows是使用命名管道,需要使用python調(diào)研windows api,太麻煩,于是想到是不是可以通過共享內(nèi)存的方式來實現(xiàn)。查了一下,Python中可以使用mmap模塊來實現(xiàn)這一功能。

Python中的mmap模塊是通過映射同一個普通文件實現(xiàn)共享內(nèi)存的。文件被映射到進程地址空間后,進程可以像訪問內(nèi)存一樣對文件進行訪問。

不過,mmap在linux和windows上的API有些許的不一樣,具體細節(jié)可以查看mmap的文檔。

下面看一個例子:

server.py

這個程序使用 test.dat 文件來映射內(nèi)存,并且分配了1024字節(jié)的大小,每隔一秒更新一下內(nèi)存信息。

import mmapimport contextlibimport timewith open("test.dat", "w") as f:  f.write('/x00' * 1024)with open('test.dat', 'r+') as f:  with contextlib.closing(mmap.mmap(f.fileno(), 1024, access=mmap.ACCESS_WRITE)) as m:    for i in range(1, 10001):      m.seek(0)      s = "msg " + str(i)      s.rjust(1024, '/x00')      m.write(s)      m.flush()      time.sleep(1)

client.py

這個程序從上面映射的文件 test.dat 中加載數(shù)據(jù)到內(nèi)存中。

import mmapimport contextlibimport timewhile True:  with open('test.dat', 'r') as f:    with contextlib.closing(mmap.mmap(f.fileno(), 1024, access=mmap.ACCESS_READ)) as m:      s = m.read(1024).replace('/x00', '')      print s  time.sleep(1)

上面的代碼可以在linux和windows上運行,因為我們明確指定了使用 test.dat 文件來映射內(nèi)存。如果我們只需要在windows上實現(xiàn)共享內(nèi)存,可以不用指定使用的文件,而是通過指定一個tagname來標識,所以可以簡化上面的代碼。如下:

server.py

import mmapimport contextlibimport timewith contextlib.closing(mmap.mmap(-1, 1024, tagname='test', access=mmap.ACCESS_WRITE)) as m:  for i in range(1, 10001):    m.seek(0)    m.write("msg " + str(i))    m.flush()    time.sleep(1)

client.py

import mmapimport contextlibimport timewhile True:  with contextlib.closing(mmap.mmap(-1, 1024, tagname='test', access=mmap.ACCESS_READ)) as m:    s = m.read(1024).replace('/x00', '')    print s  time.sleep(1)

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持武林站長站。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 仁布县| 石首市| 营口市| 江口县| 明光市| 读书| 普兰店市| 沁源县| 罗甸县| 苏尼特左旗| 突泉县| 同江市| 明光市| 康马县| 高平市| 乐昌市| 新邵县| 陆丰市| 三穗县| 临朐县| 新闻| 宁河县| 辉南县| 汶上县| 镇原县| 林芝县| 濉溪县| 西青区| 茂名市| 望城县| 阳曲县| 亳州市| 新竹县| 怀安县| 凉城县| 东海县| 屏山县| 万全县| 信阳市| 罗平县| 拉萨市|