1. 程式人生 > >Python multiprocessing 使用手記[1] – 程序模型

Python multiprocessing 使用手記[1] – 程序模型

原文:

首先從multiprocessing的程序模型開始看。

multiprocessing的目的是建立一個介面和python.threading 類似介面的庫,用多程序的方式來併發處理。因此建立一個新的程序的的方法也 和python.threading很像:

建立的這個新的程序在*nix上面使用的是fork,這意味著子程序開始執行的時候具有與父程序相同的全部內容。請記住這點,這個將是下面我們討論 基於繼承的物件共享的基礎。所謂基於繼承的物件共享,是說在建立子程序之前由父程序初始化的某些物件可以在子程序當中直接訪問到。在Windows平臺 上,因為沒有fork語義的系統呼叫,基於繼承的共享物件比*nix有更多的限制,最主要就是體現在要求

Process的__init__當中的引數必須可以Pickle

但是,並不是所有的物件都是可以通過繼承來共享,只有multiprocessing庫當中的某些物件才可以。例如Queue,同步物件,共享變數,Manager等等。

在一個multiprocessing庫的典型使用場景下,所有的子程序都是由一個父程序啟動起來的,這個父程序稱為master程序。這個父程序 非常重要,它會管理一系列的物件狀態,一旦這個程序退出,子程序很可能會處於一個很不穩定的狀態,因為它們共享的狀態也許已經被損壞掉了。因此,這個程序 最好儘可能做最少的事情,以便保持其穩定性。