Python 多工 程序池

2021-10-02 11:04:33 字數 1842 閱讀 8054

高階程式設計技巧 學習筆記

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 ...