国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 清徐县| 海南省| 浪卡子县| 宣武区| 缙云县| 鸡西市| 怀柔区| 沾化县| 金坛市| 东乌| 灵台县| 东莞市| 凉城县| 新龙县| 礼泉县| 青铜峡市| 南雄市| 二连浩特市| 九江市| 博野县| 南召县| 白水县| 赣榆县| 孝感市| 增城市| 乐陵市| 颍上县| 河西区| 荆州市| 新晃| 赤水市| 利辛县| 白水县| 滦平县| 如皋市| 交城县| 安平县| 永胜县| 德兴市| 湾仔区| 丰都县|