python什麼時候用多進程編程

(*-*)浩
發布: 2019-06-25 11:02:06
原創
2195 人瀏覽過

在並發程式設計的時候,多執行緒和多進程是經常會被使用的兩種模式(此外還有協程等)。 由於CPython 的GIL 限制(Jython 和IronPython 沒有GIL,PyPy 在嘗試去掉GIL),只有取得了GIL 的執行緒才能使用CPU,所以除了需要處理一些可能會阻塞的IO(讀寫檔、存取網路等)之外,基本上沒人會去使用CPython 的多執行緒。因此,本文就來說說更有用的 Python 多進程程式設計。

python什麼時候用多進程編程

註:推薦學習:Python影片教學

本文描述的環境為Linux 作業系統(也適用於大部分POSIX 系統)下的CPython,可能不適用於Windows作業系統或其他的Python 實作。

為了避免歧義,下文用「主進程」或「目前進程」表示創建子進程的那個進程,而不使用「父進程」,除非明確指明了「xx 的父進程」。

與多執行緒程式設計時需要傳遞一個 callable 物件不同的是,多進程程式設計的時候,是將主行程複製到子行程,並不能直接要求子行程執行某個 callable 物件。

在 POSIX 系統中,這個複製操作是由 clone() 和 fork() 系統呼叫來完成的,一般主要使用後者。
如果 fork() 執行成功的話,會分別在主進程和子進程中回傳子進程的 PID 和 0,然後執行程式碼就開始不同了。如果失敗的話(內存不夠、PID 達到上限等),子進程就不會創建,主進程會回傳 -1,errno 會被設定為對應的錯誤碼。
在 CPython 的實作中,os.fork() 主要是對 fork() 函數的封裝,差別在於失敗時拋出 OSError,該例外的 errno 屬性是對應的錯誤碼。

因此,多進程的Python 程式碼大致會長成這樣:

import os

try:
    pid = os.fork()
    if pid == 0:  # 子进程
        # 子进程的代码
    else:  # 主进程
        # 主进程的代码
except OSError:
    # 主进程处理 fork 失败的代码
登入後複製

更多Python相關技術文章,請造訪Python教學欄目進行學習!

以上是python什麼時候用多進程編程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板