- Python自動化運維快速入門
- 鄭征
- 912字
- 2019-12-09 14:48:28
3.1 創建進程的類Process
multiprocessing模塊提供了一個創建進程的類Process,其創建進程有以下兩種方法。
創建一個Process類的實例,并指定目標任務函數。
自定義一個類并繼承Process類,重寫其__init__()方法和run()方法。
我們首先使用第一種方法創建兩個進程,并與單進程運行的時間做比較。
【示例3-1】定義耗時任務,并對比單進程和多進程耗時(multi_process.py)。

上面的代碼首先定義了一個上億次數據累加的耗時函數,在運行結束時打印調用此函數的進程ID,第14和15行是單進程執行,第18和19行分別實例化了Process類,并指定目標函數為task_process,第21和22行是雙進程并行執行,執行完成后打印耗時。其運行結果如下:
父進程pid為 2116. 進程pid為 2116,執行完成 進程pid為 2116,執行完成 順序執行耗時 37.13105368614197 進程pid為 60624,執行完成 進程pid為 41016,執行完成 多進程并發執行耗時 24.04837417602539
我們發現多進程執行相同的操作次數耗時更少。接下來我們使用第二種方法實現【示例3-1】。
【示例3-2】自定義一個類并繼承Process類(multi_process2.py)。

提示
進程p0、p1在調用start()時,自動調用其run()方法。
運行結果如下:
父進程pid為 57228. 進程pid為 59932,執行完成 進程pid為 61288,執行完成 多進程并發執行耗時 24.03329348564148
下面我們來看一下Process類還有哪些功能可以使用,該類的構造函數原型如下。
class multiprocessing.Process(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
參數說明如下。
target表示調用對象,一般為函數,也可以為類。
args表示調用對象的位置參數元組。
kwargs表示調用對象的字典。
name為進程的別名。
group參數不使用,可忽略。
類提供的常用方法如下。
is_alive():返回進程是否是激活的。
join([timeout]):阻塞進程,直到進程執行完成或超時或進程被終止。
run():代表進程執行的任務函數,可被重寫。
start():激活進程。
terminate():終止進程。
屬性如下。
authkey:字節碼,進程的準密鑰。
daemon:父進程終止后自動終止,且不能產生新進程,必須在start()之前設置。
exitcode:退出碼,進程在運行時為None,如果為–N,就表示被信號N結束。
name:獲取進程名稱。
pid:進程id。
【示例3-3】不設置daemon屬性(multi_process_no_daemo.py)。

這里沒有使用p0.join()來阻塞進程。運行結果如下:
2018-07-11 21:13:30 父進程執行開始 2018-07-11 21:13:30 父進程執行結束 2018-07-11 21:13:30 子進程執行開始 sleep 3s 2018-07-11 21:13:33 子進程執行結束
可以看出,父進程并沒有等待子進程運行完成就打印了退出信息,程序依然會等待子進程運行完成。
【示例3-4】設置daemon屬性(multi_process_daemo.py)。

運行結果如下:
2018-07-11 21:17:33 父進程執行開始 2018-07-11 21:17:33 父進程執行結束
程序并沒有等待子進程結束而結束,只要主程序運行結束,程序即退出。
- 現代C++編程:從入門到實踐
- Learning Cython Programming(Second Edition)
- JavaScript+jQuery網頁特效設計任務驅動教程(第2版)
- Magento 2 Theme Design(Second Edition)
- 算法精粹:經典計算機科學問題的Python實現
- 機器人Python青少年編程開發實例
- NativeScript for Angular Mobile Development
- Android 應用案例開發大全(第3版)
- Teaching with Google Classroom
- RISC-V體系結構編程與實踐(第2版)
- Protocol-Oriented Programming with Swift
- Kotlin編程實戰:創建優雅、富于表現力和高性能的JVM與Android應用程序
- 小型編譯器設計實踐
- Developing SSRS Reports for Dynamics AX
- Learning Ionic