摘要:查看有多少個子進程,可以使用命令來查看。很少的資源即可實現多任務。可以說線程時進程進程的一部分。當任務數固定,比較少,使用創建多進程當任務數不固定,數量較多時,使用進程池來解決。向進程池里面添加任務關閉進程池等待所有子進程執行完畢。
進程
進程是啟動中的程序,擁有資源,比如攝像頭,鼠標,顯卡,網卡,鍵盤。讓操作系統調度。是資源分配的單位,進程切換時占用的資源比較大。
創建進程方式:
p1 = multiprocessing.Process(target=test1)?p1.start()
使用multiprocessing.Process可以創建多進程,但是創建每份子進程時都會復制一份代碼+資源,所以創建多進程會耗費更多的資源。
查看有多少個子進程,可以使用linux命令ps -aux來查看。
一. 進程和線程的區別:
進程:能夠實現多任務,一個電腦上開多個qq, 需要很大的資源才能實現多任務
線程:能夠實現多任務,一個qq上開了多個聊天窗口。很少的資源即可實現多任務。先有進程,才有線程。可以說線程時進程進程的一部分。
二. 消息隊列queue是進程間通信的一種方式,socket也是。
queue隊列:先進先出,
棧:先進后出
queue的使用:
q = Queue(3)?q.put("adsb")?print(q.full())?? try:? q.put_nowait("aaa")?except:? print("隊列已滿")??print(q.get())?print(q.empty())?? try:? q.get_nowait()?except:? print("隊列已空")
三. 進程池pool
pool是用來解決數量比較大的任務執行時,所用到一種最大化資源利用的方式。
當任務數固定,比較少,使用multiprocessing.Process創建多進程;
當任務數不固定,數量較多時,使用進程池pool來解決。
po = Pool(3)??for i in range(10):? po.apply_async(work, (i, )) #向進程池里面添加任務 ??po.close() #關閉進程池 ?po.join() #等待所有子進程執行完畢。意思是子進程都結束后,再操作子進程,必須再close的后面。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43628.html
摘要:每個在同一時間只能執行一個線程在單核下的多線程其實都只是并發,不是并行,并發和并行從宏觀上來講都是同時處理多路請求的概念。在多線程下,每個線程的執行方式獲取執行代碼直到或者是虛擬機將其掛起。拿不到通行證的線程,就不允許進入執行。 進程與線程 并發與并行 進程與線程 首先要理解的是,我們的軟件都是運行在操作系統之上,操作系統再控制硬件,比如 處理器、內存、IO設備等。操作系統為了向上...
摘要:在中由于歷史原因使得中多線程的效果非常不理想使得任何時刻只能利用一個核并且它的調度算法簡單粗暴多線程中讓每個線程運行一段時間然后強行掛起該線程繼而去運行其他線程如此周而復始直到所有線程結束這使得無法有效利用計算機系統中的局部性頻繁的線程切換 GIL 在Python中,由于歷史原因(GIL),使得Python中多線程的效果非常不理想.GIL使得任何時刻Python只能利用一個CPU核,...
閱讀 4028·2021-11-22 13:53
閱讀 3625·2021-11-19 11:29
閱讀 1275·2021-09-08 09:35
閱讀 3171·2020-12-03 17:26
閱讀 517·2019-08-29 16:06
閱讀 2110·2019-08-26 13:50
閱讀 1187·2019-08-23 18:32
閱讀 2155·2019-08-23 18:12