高階程式設計技巧 學習筆記
1.1、為什麼要用程序池
當需要建立的子程序數量不多時,可以直接利用multiprocessing
中的process
動態生成多個程序,但是如果是上百甚至上千個目標,手動的去建立的程序的工作量巨大,此時就可以用到multiprocessing
模組提供的pool
方法。
初始化 pool 時,可以指定乙個最大程序數,當有新的請求提交到 pool 中時,如果池還沒有滿,那麼就會建立乙個新的程序用來執行該請求,但是如果池中的程序數已經達到指定的最大值,那麼該請求就會等待,直到池中有程序結束,才會用之前的程序來執行新的任務。
1.2、**實現
from multiprocessing import pool
import os, time, random
defworker
(msg)
: t_start = time.time(
)print
('%s開始執行,程序號為%d'
%(msg, os.getpid())
) time.sleep(random.random()*
2)t_stop = time.time(
)print
(f"\n執行完成,耗時%0.2f"
%(t_stop - t_start)
)def
demo()
:pass
if __name__ ==
'__main__'
: po = pool(4)
# 定義乙個程序池 3個程序
for i in
range(0
,10):
# 向程序池新增乙個請求, 每個請求會占用乙個程序
(i,)
)print
("--start--"
)# 關閉程序池 不在接收新的請求
po.close(
)# 此時想要新增新請求會報錯
# 等待子程序執行完成
po.join(
)print
("--end--"
)
2.1、queue() 實現程序池間的程序通訊
import multiprocessing
defdemo1
(q):
q.put(
'a')
defdemo2
(q):
data = q.get(
)print
(data)
if __name__ ==
'__main__'
:# q = queue() # 普通佇列, 不能實現程序之間的通訊
# q = multiprocessing.queue() # 實現程序之間的通訊
q = multiprocessing.manager(
).queue(
)# 實現程序池之間的通訊
po = multiprocessing.pool(2)
(q,)
)(q,))
po.close(
) po.join(
)
2.3、queue() 間的區別
到這裡為止,已經知道了三個 queue(),它們相似但作用卻不盡相同。
多工14 程序池Pool
當需要建立的子程序數量不多時,可以直接利用multiprocessing中的process動態成生多個程序,但如果是上百甚至上千個目標,手動的去建立程序的工作量巨大,此時就可以用到multiprocessing模組提供的pool方法。初始化pool時,可以指定乙個最大程序數,當有新的請求提交到poo...
python 多工 程序
什麼是程序?程式是靜態的,當程式執行起來就叫做程序。程序是作業系統分配資源的基本單元。程序 執行緒的區別與優缺點 1.定義的不同 程序是系統進行資源分配的最小單位.執行緒是程序的乙個實體,是cpu進行排程的基本單位。執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源 如程式計數器,一組...
Python多工之程序
python通過多程序實現多工的幾種方法 只用在類unix linux系統中有效,windows系統中無效 fork函式呼叫一次,返回兩次 在父程序中返回值為子程序id,在子程序中返回值為0 import os ret os.fork if ret 父程序 print 主程序,pid format ...