Python多程序(2)——mmap模組與mmap物件
本文介紹Python mmap模組與mmap物件的用法。
mmap 模組提供“記憶體對映的檔案物件”,mmap 物件可以用在使用 plain string 的地方,mmap 物件和 plain string 的區別是:
- mmap 物件不提供字串物件的方法;
- mmap 物件是可變的,而 str 物件是不可變的
- mmap 物件同時對應於開啟的檔案,多型於一個Python file 物件
mmap 物件可以切片和索引,也可以為它的切片或索引賦值(因為 mmap 物件是可變的),為 mmap 物件的切片賦值時,賦值語句右值的長度必須和左值切片的長度相同。mmap 物件可以作為程序間通過檔案進行 IPC 的一種替換手段。
建立 mmap 物件
mmap(filedesc, length, tagname='') #windows mmap(filedesc, length, flag=MAP_SHARED, prot=PROT_READ|PROT_WRITE) #Unix
建立並返回一個 mmap 物件,引數 filedesc 通常是由 f.fileno()獲得的,這在Python檔案系列中已經介紹過。
mmap 建立物件的含義是:將指定 fd 的前 length 位元組對映到記憶體。
Windows中,可以通過引數tagname為一段記憶體對映指定名稱,這樣一個檔案上面可以同時具有多個 mmap。windows中的記憶體對映都是可讀可寫的,同時在程序之間共享。
Unix平臺上,引數 flags 的可選值包括:
mmap.MAP_PRIVATE:這段記憶體對映只有本程序可用;
mmap.MAP_SHARED:將記憶體對映和其他程序共享,所有映射了同一檔案的程序,都能夠看到其中一個所做的更改;
引數 prot 對應的取值包括:mmap.PROT_READ, mmap.PROT_WRITE 和 mmap.PROT_WRITE | mmap.PROT_READ。最後一者的含義是同時可讀可寫。
mmap 物件的方法
m.close() 關閉 m 對應的檔案;
m.find(str, start=0) 從 start 下標開始,在 m 中從左往右尋找子串 str 最早出現的下標;
m.flush([offset, n]) 把 m 中從offset開始的n個位元組刷到對應的檔案中,引數 offset 要麼同時指定,要麼同時不指定;
m.move(dstoff, srcoff, n) 等於 m[dstoff:dstoff+n] = m[srcoff:srcoff+n],把從 srcoff 開始的 n 個位元組複製到從 dstoff 開始的n個位元組,可能會覆蓋重疊的部分。
m.read(n) 返回一個字串,從 m 對應的檔案中最多讀取 n 個位元組,將會把 m 對應檔案的位置指標向後移動;
m.read_byte() 返回一個1位元組長的字串,從 m 對應的檔案中讀1個位元組,要是已經到了EOF還呼叫 read_byte(),則丟擲異常 ValueError;
m.readline() 返回一個字串,從 m 對應檔案的當前位置到下一個'\n',當呼叫 readline() 時檔案位於 EOF,則返回空字串;
m.resize(n) 把 m 的長度改為 n,m 的長度和 m 對應檔案的長度是獨立的;
m.seek(pos, how=0) 同 file 物件的 seek 操作,改變 m 對應的檔案的當前位置;
m.size() 返回 m 對應檔案的長度(不是 m 物件的長度len(m));
m.tell() 返回 m 對應檔案的當前位置;
m.write(str) 把 str 寫到 m 對應檔案的當前位置,如果從 m 對應檔案的當前位置到 m 結尾剩餘的空間不足len(str),則丟擲 ValueError;
m.write_byte(byte) 把1個位元組(對應一個字元)寫到 m 對應檔案的當前位置,實際上 m.write_byte(ch) 等於 m.write(ch)。如果 m 對應檔案的當前位置在 m 的結尾,也就是 m 對應檔案的當前位置到 m 結尾剩餘的空間不足1個位元組,write() 丟擲異常ValueError,而 write_byte() 什麼都不做。
對於EOF的處理,write() 和 read_byte() 丟擲異常 ValueError,而 write_byte() 和 read() 什麼都不做。
例:
# process 1 f = open('xxx', 'w') while True: data = raw_input('Enter some text:') f.seek(0) f.write(data) f.truncate() f.flush() # process 2 import mmap, os, time m = mmap.mmap(os.open('xxx', os.O_RDWR), 1) last = None while True: m.resize(m.size()) data = [:] if data != last: print data last = data time.sleep(5)
該例子中,process 1 等待使用者輸入新內容並將其寫入到檔案 xxx 中,process 2 直接將整個檔案對映到記憶體物件 m,然後每隔5秒檢查一下檔案是否發生變化。
相關推薦
Python多程序(2)——mmap模組與mmap物件
本文介紹Python mmap模組與mmap物件的用法。 mmap 模組提供“記憶體對映的檔案物件”,mmap 物件可以用在使用 plain string 的地方,mmap 物件和 plain string 的區別是: mmap 物件不提供字串物件的方法; mmap 物件是可變的,而 str
python進階(2)——re模組:正則表示式1
實驗結果輸出文件,包括多項引數(大約幾百個),想把所有的loss value對應的值提取出來,畫出曲線圖,這就需要用到正則表示式,基於此,開始學習正則表示式。 正則表示式:可匹配文字片段的模式 萬用字元:句點.(.ython與jpython與python與 ython都匹配,但不與ython
python進階(2)——re模組:正則表示式2
re.split 根據模式來分割字串 import re text='a, b,,,,c d' print(re.split('[, ]+', text)) #re.split:以空格和字串分割字元 re.findall 返回列表,包含所有與給定模式匹配的子串 import re
Python多程序(multiprocessing)學習總結
RawArray(typecode_or_type, size_or_initializer) Returns a shared array返回一個共享佇列 RawValue(typecode_or_type, *args) Returns a shared
Python多程序(1)——subprocess與Popen()
Python多程序方面涉及的模組主要包括: multiprocessing:提供支援多處理器技術的多程序程式設計介面,並且介面的設計最大程度地保持了和threading模組的一致,便於理解和使用。 本文主要介紹 subprocess 模組及其提供的 Popen 類,以及如何使用該構造器
Python多程序(multiprocessing)一
目錄 簡介 多程序相對於多執行緒可以更好的使用多核,避開GIL(Global Interpreter Lock)的影響。而且多程序引入了程序池的概念,可以更好的並行處理不同輸入的資料。 Process 類 在多程序中,通過建立Process
python高階(二)——多工(二)程序(2)資料夾拷貝器
import os import multiprocessing def copy_file(q, file_name, old_folder_name, new_folder_name): """完成檔案複製""" old_f = open(old_folder_name +
第一個python程序(2)
小結 nts 技術 數學公式 spa 但是 漂亮 num 回車 輸入和輸出 輸出 用print加上字符串,就可以向屏幕上輸出指定的文字。比如輸出‘hello, world‘,用代碼實現如下: >>> print ‘hello, world‘ print語
初學python的一些簡單程序(2)
eric not in mov AS int pen != 必須 light 1)判斷兩個列表內容相同的元素 l1=[11,22,33] l2=[22,33,44] for i in l1: if i in l2: print(i) 2)獲取l1
Python多工(2.執行緒(建立執行緒的兩種方式))
Python中threading模組 可以總結出: (1)當呼叫Thread的時候,不會建立執行緒 (2)呼叫Thread創建出來的例項物件的start方法的時候,才會建立執行緒以及讓這個執行緒開始執行  
Python 多執行緒、多程序 (二)之 多執行緒、同步、通訊
Python 多執行緒、多程序 (一)之 原始碼執行流程、GIL Python 多執行緒、多程序 (二)之 多執行緒、同步、通訊 Python 多執行緒、多程序 (三)之 執行緒程序對比、多執行緒 一、python多執行緒 對於I/O操作的時候,程序與執行緒的效能差別不大,甚至由於執行緒更輕量級,效能更高
Python 多執行緒、多程序 (一)之 原始碼執行流程、GIL
Python 多執行緒、多程序 (一)之 原始碼執行流程、GIL Python 多執行緒、多程序 (二)之 多執行緒、同步、通訊 Python 多執行緒、多程序 (三)之 執行緒程序對比、多執行緒 一、python程式的執行原理 許多時候,在執行一個python檔案的時候,會發現在同一目錄下會出現一個__
Python 多執行緒、多程序 (三)之 執行緒程序對比、多程序
Python 多執行緒、多程序 (一)之 原始碼執行流程、GIL Python 多執行緒、多程序 (二)之 多執行緒、同步、通訊 Python 多執行緒、多程序 (三)之 執行緒程序對比、多執行緒 一、多執行緒與多程序的對比 在之前簡單的提過,CPython中的GIL使得同一時刻只能有一個執行緒執行,即併
python中多程序(multiprocessing)
python中多程序(multiprocessing) 一、multiprocessing中使用子程序概念 from multiprocessing import Process 可以通過Process來構造一個子程序 p = Process(target=fun,args=(arg
Python 多執行緒、多程序 (二)之 多執行緒、同步、通訊
一、python多執行緒 對於I/O操作的時候,程序與執行緒的效能差別不大,甚至由於執行緒更輕量級,效能更高。這裡的I/O包括網路I/O和檔案I/O 1、例項 假如利用socket傳送http請求,也就是網路I/O。爬取列表網頁中的寫href連結,然後獲取href連結之後,在爬去連結的網頁詳情。 如果不適用
Python中多程序的使用 Python的多執行緒(threading)與多程序(multiprocessing )示例程式碼 Python多程序程式設計
程序:程式的一次執行(程式載入記憶體,系統分配資源執行)。每個程序有自己的記憶體空間,資料棧等,程序之間可以進行通訊,但是不能共享資訊。 執行緒:所有的執行緒執行在同一個程序中,共享相同的執行環境。每個獨立的執行緒有一個程式入口,順序執行序列和程式的出口。 執行緒的執行可以被強佔,中斷或者暫時被
python中的Queue與多程序(multiprocessing)
最近接觸一個專案,要在多個虛擬機器中執行任務,參考別人之前專案的程式碼,採用了多程序來處理,於是上網查了查python中的多程序 一、先說說Queue(佇列物件) Queue是python中的標準庫,可以直接import 引用,之前學習的時候有聽過著名的“先吃先拉”與“後吃
【nodejs原理&原始碼賞析(4)】深度剖析cluster模組原始碼與node.js多程序(上)
目錄 一. 概述 二. 執行緒與程序 三. cluster模組原始碼解析 3.1 起步 3.2 入口 3.3 主程序模組master.js 3.4 子程序模組c
【nodejs原理&原始碼賞析(6)】深度剖析cluster模組原始碼與node.js多程序(下)
目錄 一. 引言 二.server.listen方法 三.cluster._getServer( )方法 四.跨程序通訊工具方法Utils 五.act:queryServer訊息
python的多執行緒和多程序(一)
在進入主題之前,我們先學習一下併發和並行的概念: --併發:在作業系統中,併發是指一個時間段中有幾個程式都處於啟動到執行完畢之間,且這幾個程式都是在同一個處理機上執行。但任一時刻點上只有一個程式在處理機上執行。形象的點描述:一個人做很多事情,但同一時刻只能做一件事情。 --並行:當系統有一個CPU時,則程式的