上篇部落格中我們提到了使用process這個包來建立程序,除此之外,我們還可以自定義乙個類,繼承process類,通過例項化這個類來例項化乙個新的程序物件,下面請看乙個簡單的例子
import time
from multiprocessing import process
class
lakers_champion
(process)
: n =
3while n >0:
print
("湖人總冠軍"
) time.sleep(1)
n -=
1if __name__ ==
'__main__'
: p = lakers_champion(
) p.start(
) p.join(
)
來看一下執行結果
湖人總冠軍
湖人總冠軍
湖人總冠軍
湖人總冠軍
湖人總冠軍
湖人總冠軍
當我們專案中需要的子程序數量不多時,可以使用process來建立程序或通過繼承process來例項化乙個程序,但是當我們需要成百上千的程序時,再通過這種方法建立程序顯然是低效的,這個時候我們就需要引入新的概念——程序池,在python中可以用到multiprocessing模組提供的pool。
from multiprocessing import pool
初始化pool時, 可以指定⼀個最⼤程序數, 當有新的請求提交到pool中時,如果池還沒有滿, 那麼就會建立⼀個新的程序⽤來執⾏該請求; 但如果池中的程序數已經達到指定的最⼤值, 那麼該請求就會等待, 直到池中有程序結束, 才會建立新的程序來執⾏,我們通過乙個簡單的例子來了解相關的使用方法
from multiprocessing import process, pool
import random
import time
defwork
(num)
:print
(random.random(
)*num)
time.sleep(3)
if __name__ ==
'__main__'
: po = pool(
)# 定義乙個程序池,最大程序數為3,預設大小為cpu核數
for i in
range(10
):(i,)
) po.close(
)# 程序池關閉後不再接收新的請求,指的是不再接收新的請求,並不會殺死正在執行的程序
po.join(
)# 等待po中所有的子程序結束,必須放在close後面
來看一下執行結果
0.0
0.34984100078459757
0.5201072456606135
0.40449373225754937
1.224435745451367
3.506216623423578
1.4749908838684131
2.6109286282731015
0.6106200958130108
1.4684032840327501
來看一下常用函式的解析
po = pool(
), args[
, kwds]])
# 使⽤⾮阻塞⽅式調⽤func(並⾏執⾏, 堵塞⽅式必須等待上⼀個程序退出才能執⾏下⼀個程序) , args為傳遞給func的引數列表, kwds為傳遞給func的關鍵字引數列表;
po.(func[
, args[
, kwds]])
# (了解即可幾乎不用) 使⽤阻塞⽅式調⽤func
po.close(
)# 關閉pool, 使其不再接受新的任務;
po.terminate(
)# 不管任務是否完成, ⽴即終⽌;
po.join(
)# 主程序阻塞, 等待⼦程序的退出, 必須在close或terminate之後使⽤;
Python 多執行緒與多程序
前言 以前玩單機或者玩小資料集,都基本不用多執行緒或多程序都能基本滿足需求了 所以沒怎麼了解這方面的東西。但現在玩幾百萬甚至上千萬的資料,甚至集群等東西之後,就有必要學習多執行緒或多程序了。在python中首先要匯入相關的模組 import threading as td import multip...
python 多執行緒與多程序
程序與執行緒的區別 程序 應用程式的執行例項,每乙個執行中的程式就是乙個程序 執行緒 程序的組成部分,乙個程序可以擁有多個執行緒 在多執行緒中,會有乙個主線程來完成整個程序從開始到結束的全部操作,而其他的執行緒會在主線程的執行過程中被建立或退出。python景區賣票系統 多執行緒的應用 import...
Python多執行緒與多程序
python多執行緒與多程序 程序 process 和執行緒 thread 是非常抽象的概念,也是程式設計師必需掌握的核心知識!多程序和多執行緒程式設計對於 的併發執行,提公升 效率和縮短執行時間至關重要。程序 process 和執行緒 thread 程序是作業系統分配資源的最小單元 執行緒是作業系...