Skip to Main Content
高效能PYTHON程式設計
book

高效能PYTHON程式設計

by Micha Gorelick, Ian Ozsvald
August 2015
Intermediate to advanced content levelIntermediate to advanced
384 pages
7h 42m
Chinese
GoTop Information, Inc.
Content preview from 高效能PYTHON程式設計
multiprocessing 模組
|
263
# 檢查 lencounter== NBR_OF_PROCESSES
# 確認每個行程都做了一些工作
assert len(counter) == NBR_OF_PROCESSES
raw_input("Press a key to exit...")
我們剛剛建立了一維的位元組陣列,把它轉換成二維陣列,在 4 個行程之間共用該陣
列,並且允許它們並行地處理相同的記憶體區塊。這個做法幫助你透過多個核心進行平
行化處理,不過,要小心對相同資料點的並行存取—假如你想要避免發生同步化問題,
就必須在
multiprocessing
裡使用鎖定,這會拖慢你的程式碼。
同步化檔案與變數存取
在下列範例裡,我們會檢視多個行程共用及操作狀態的情況—在此案例中,4 個行程分
別遞增共用計數器,若沒有同步化(synchronization),該計數不會是正確的。假如透
過連貫的方式共用資料,你總是必須以某種方式同步化資料的讀寫,否則的話,終究會
弄錯。
通常,同步化方法特定於你所使用的 OS,而且經常特定於你所使用的語言。在這裡,
我們使用 Python 程式庫檢視基於檔案的同步化,並且在 Python 行程之間共用整數
物件。
檔案鎖定
讀寫檔案將是這一節裡最緩慢的資料共用範例。
你可以在範例 9-33 中看到我們的第一個
work
函式,該函式繞行本地計數器,在每一次
迭代中,它開啟檔案並且讀取既有值,遞增它,接著以新值覆蓋舊值。在第一次迭代
中,檔案會是空的或不存在,因此,它將捕捉例外,並且假設該值應該是零。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

流畅的Python

流畅的Python

Luciano Ramalho
手把手教会你linux

手把手教会你linux

桑德.范.乌格特

Publisher Resources

ISBN: 9789863477105