「Python從入門到精通」(二十五)Python多程序的使用

您好,我是碼農飛哥,感謝您閱讀本文,歡迎一鍵三連哦

本篇重點介紹Python多程序的使用,讀者朋友們可以將多程序和多執行緒兩者做一個對比學習。

乾貨滿滿,建議收藏,需要用到時常看看。 小夥伴們如有問題及需要,歡迎踴躍留言哦~ ~ ~。

前言

前面我們介紹了多執行緒的使用,這篇文章將來學習多程序的使用。

程序的建立

Python的multiprocessing模組提供了Process類,該類可用來在各平臺下建立新程序。其建構函式是:

__init__(self, group=None, target=None, name=None, args=(), kwargs={})

其中,各個引數的含義如下:

group: 該引數未實現,不需要傳參

target:為新建程序指定執行任務,也就是指定一個函式

args:以元組的方式,為target指定的方法傳遞引數,如果傳入的是元組中有多個引數的話則傳入方式是

(arg1,arg2,。。。。argn,)

kwargs:以字典的方法,為target指定的方法傳遞引數。

name: 為新建程序設定名稱

一些常用方法介紹

start() 方法用於啟動程序

run() 方法用於執行所要執行的任務

is_alive() 方法用於判斷當前程序是否還活著

getPid() 方法用於獲取程序的ID號。

1。直接建立Process類的例項物件,由此就可以建立一個新的程序;

這個就類似於直接建立例項化執行緒Thread類

from multiprocessing import Processimport os# 定義要呼叫的方法def async_fun(name, add): for arc in add: print(name + str(os。getpid()) + “ ” + arc)

if

name

== ‘

main

’: my_tuple = (“碼農飛哥”, “今天是宅家的一天”, “30歲了還沒物件焦慮呀”)

# 建立程序process = Process(target=async_fun, args=(“子程序”, my_tuple))# 啟動子程序process。start()# 啟動主程序async_fun(“主程序”, my_tuple)

執行結果是:

主程序11610 碼農飛哥主程序11610 今天是宅家的一天主程序11610 30歲了還沒物件焦慮呀子程序11612 碼農飛哥子程序11612 今天是宅家的一天子程序11612 30歲了還沒物件焦慮呀

這裡需要注意的一點是,必須要將程式碼放在`if __name__ == ‘__main__’:` 程式碼塊中。透過os。getpid()方法來獲取程序號。#### 2。透過繼承Process類的子類,建立例項物件,也可以建立新的程序。第二種方式就是透過繼承Process類的子類,建立例項物件,也可以建立新的程序,不過這種方式需要重寫父類的run()方法。這種方法就類似於直接繼承Thread類建立執行緒。```pyimport multiprocessingimport os# 定義要呼叫的方法def async_fun(name, add): for arc in add: print(name + str(os。getpid()) + “ ” + arc)class MyProcess(multiprocessing。Process): def __init__(self, name, add): multiprocessing。Process。__init__(self) self。add = add self。name = name # 重寫run()方法 def run(self): async_fun(self。name, self。add)if __name__ == ‘__main__’: my_tuple = (“碼農飛哥”, “今天是宅家的一天”, “宅家也不能虛度”) myprocess = MyProcess(“子程序”, my_tuple) myprocess。start() # 主程序 async_fun(“主程序”, my_tuple)

執行結果同上。這裡還是推薦使用

第一種方法建立程序

,因為這種方式建立程序比較簡潔

程序池的使用

由於建立程序對系統的開銷比較大。所以,所以在實際開發中一般都會使用程序池來建立程序。程序池的使用與執行緒池的使用也是有神似的地方。同樣的在multiprocessing模組中提供了Pool函式來建立程序池。

import osfrom multiprocessing import Poolimport time# 定義要呼叫的方法def async_fun(add): time。sleep(1) print(“程序號:” + str(os。getpid()) + “ ” + add)if __name__ == ‘__main__’: add = “碼農飛哥,今天是宅家的一天,30歲了還沒物件焦慮呀” # 建立包含4個程序的程序池 pool = Pool(processes=4) # 提交action pool。apply_async(func=async_fun, args=(add,)) pool。apply_async(func=async_fun, args=(“加油加油”,)) pool。close() pool。join()

執行結果是:

程序號:11658 碼農飛哥,今天是宅家的一天,30歲了還沒物件焦慮呀程序號:11659 加油加油

同樣的程序池也可以透過with語句來建立

from multiprocessing import Poolimport osimport timedef async_add(max): time。sleep(1) print(“程序號:” + str(os。getpid()) + “最大值是” + str(max))if __name__ == ‘__main__’: with Pool(processes=4) as pool: # 使用執行緒池執行max計算 results = pool。map(async_add, (20, 30, 40, 50))

執行結果是:

程序號:11726最大值是20程序號:11725最大值是30程序號:11727最大值是40程序號:11728最大值是50

多程序和多執行緒的優缺點對比

多程序的優點就是穩定性好,一個子程序崩潰了,不會影響主程序以及其餘子程序,各個子程序各用一套獨立的記憶體空間。多執行緒的優點就是效率高,適用於批處理等功能。多程序的缺點就是建立程序的代價非常大,因為作業系統要給每個程序分配固定的資源,並且作業系統對程序的總數會有一定的限制,若程序過多,作業系統排程都會存在問題,會造成假死狀況。

總結

本文詳細介紹了Python多程序的使用。

Python知識圖譜

為了更好幫助更多的小夥伴對Python從入門到精通,我從CSDN官方那邊搞來了一套 《==Python全棧知識圖譜==》,尺寸 870mm x 560mm,展開後有一張辦公桌大小,也可以摺疊成一本書的尺寸,有興趣的小夥伴可以瞭解一下————掃描下圖中的二維碼即可購買。

「Python從入門到精通」(二十五)Python多程序的使用

我本人也已經用上了,感覺非常好用。圖譜桌上放,知識心中留。

「Python從入門到精通」(二十五)Python多程序的使用

我是碼農飛哥,再次感謝您讀完本文

。全網同名【碼農飛哥】。不積跬步,無以至千里,享受分享的快樂

我是碼農飛哥,再次感謝您讀完本文