摘要:查看有多少個子進程,可以使用命令來查看。很少的資源即可實現(xiàn)多任務??梢哉f線程時進程進程的一部分。當任務數(shù)固定,比較少,使用創(chuàng)建多進程當任務數(shù)不固定,數(shù)量較多時,使用進程池來解決。向進程池里面添加任務關(guān)閉進程池等待所有子進程執(zhí)行完畢。
進程
進程是啟動中的程序,擁有資源,比如攝像頭,鼠標,顯卡,網(wǎng)卡,鍵盤。讓操作系統(tǒng)調(diào)度。是資源分配的單位,進程切換時占用的資源比較大。
創(chuàng)建進程方式:
p1 = multiprocessing.Process(target=test1)?p1.start()
使用multiprocessing.Process可以創(chuàng)建多進程,但是創(chuàng)建每份子進程時都會復制一份代碼+資源,所以創(chuàng)建多進程會耗費更多的資源。
查看有多少個子進程,可以使用linux命令ps -aux來查看。
一. 進程和線程的區(qū)別:
進程:能夠?qū)崿F(xiàn)多任務,一個電腦上開多個qq, 需要很大的資源才能實現(xiàn)多任務
線程:能夠?qū)崿F(xiàn)多任務,一個qq上開了多個聊天窗口。很少的資源即可實現(xiàn)多任務。先有進程,才有線程??梢哉f線程時進程進程的一部分。
二. 消息隊列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是用來解決數(shù)量比較大的任務執(zhí)行時,所用到一種最大化資源利用的方式。
當任務數(shù)固定,比較少,使用multiprocessing.Process創(chuàng)建多進程;
當任務數(shù)不固定,數(shù)量較多時,使用進程池pool來解決。
po = Pool(3)??for i in range(10):? po.apply_async(work, (i, )) #向進程池里面添加任務 ??po.close() #關(guān)閉進程池 ?po.join() #等待所有子進程執(zhí)行完畢。意思是子進程都結(jié)束后,再操作子進程,必須再close的后面。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/43628.html
摘要:每個在同一時間只能執(zhí)行一個線程在單核下的多線程其實都只是并發(fā),不是并行,并發(fā)和并行從宏觀上來講都是同時處理多路請求的概念。在多線程下,每個線程的執(zhí)行方式獲取執(zhí)行代碼直到或者是虛擬機將其掛起。拿不到通行證的線程,就不允許進入執(zhí)行。 進程與線程 并發(fā)與并行 進程與線程 首先要理解的是,我們的軟件都是運行在操作系統(tǒng)之上,操作系統(tǒng)再控制硬件,比如 處理器、內(nèi)存、IO設備等。操作系統(tǒng)為了向上...
摘要:在中由于歷史原因使得中多線程的效果非常不理想使得任何時刻只能利用一個核并且它的調(diào)度算法簡單粗暴多線程中讓每個線程運行一段時間然后強行掛起該線程繼而去運行其他線程如此周而復始直到所有線程結(jié)束這使得無法有效利用計算機系統(tǒng)中的局部性頻繁的線程切換 GIL 在Python中,由于歷史原因(GIL),使得Python中多線程的效果非常不理想.GIL使得任何時刻Python只能利用一個CPU核,...
閱讀 4038·2021-11-22 13:53
閱讀 3632·2021-11-19 11:29
閱讀 1286·2021-09-08 09:35
閱讀 3181·2020-12-03 17:26
閱讀 522·2019-08-29 16:06
閱讀 2119·2019-08-26 13:50
閱讀 1192·2019-08-23 18:32
閱讀 2164·2019-08-23 18:12