Python的程序池

2021-10-03 03:49:36 字數 3592 閱讀 8361

了解了python的多程序之後,我們會發現,如果有大量任務需要使用多程序來完成,則可能需要頻繁的建立刪除程序,給計算機帶來較多的資源消耗。(多程序的缺點就是會頻繁的建立和刪除程序,消耗計算機資源)。基於這種情況,於是出現了程序池。

程序池的原理:

舉乙個通俗易懂的例子:

使用程序池步驟:

建立程序池,在池內放入適當的程序

將事件加入到程序池等待佇列

不斷取程序執行事件,直到所有事件執行完畢

關閉程序池,**程序

**如下:

from multiprocessing import pool 

from time import sleep

from datetime import datetime

deftest

(msg)

: sleep(3)

print

(msg,

':', datetime.now(

).strftime(

'%h:%m:%s'))

#建立程序池

pool = pool(processes =3)

for i in

range(1

,10):

msg =

"no."

+str

(i)print

(msg,

, datetime.now(

).strftime(

'%h:%m:%s'))

#將事件放入程序池佇列,等待執行

(msg,))

#關閉程序池

pool.close(

)#**程序池

pool.join(

)

在**中,我設定程序池中有三個程序,然後通過迴圈遍歷的方式向程序池的等待佇列中加入需要處理的任務(9個任務),然後程序池會從佇列中獲取任務然後處理。程序池一次最多只能處理3個任務

執行結果:

gk@gk-vm:

~/python$ python3 pool_test.py

no.:16:

03no.:16

:03no.:16:

03no.:16

:03no.:16:

03no.:16

:03no.:16:

03no.:16

:03no.:16:

03no.1:

15:16:

06no.2:

15:16:

06no.3:

15:16:

06no.5:

15:16:

09no.4:

15:16:

09no.6:

15:16:

09no.7:

15:16:

12no.9:

15:16:

12no.8:

15:16:

12

觀察執行結果中的時間,所有的任務幾乎在同一時間全部放入了程序池等待佇列中,然後,在執行的任務結果中,每三個輸出結果為一組,時間間隔為3秒。

其中:

pool(processes)

pool.close()

pool.join()

特別注意:

更改上面的**:

from multiprocessing import pool 

from time import sleep

from datetime import datetime

deftest

(msg)

: sleep(3)

print

(msg,

':', datetime.now(

).strftime(

'%h:%m:%s'))

#建立程序池

pool = pool(processes =3)

for i in

range(1

,10):

msg =

"no."

+str

(i)print

(msg,

, datetime.now(

).strftime(

'%h:%m:%s'))

#將事件放入程序池佇列,等待執行

pool.

(func = test,args =

(msg,))

#關閉程序池

pool.close(

)#**程序池

pool.join(

)

執行結果:

gk@gk-vm:~/python$ python3 pool_test3.py 

no.1 : 15:13:24

no.2 : 15:13:27

no.3 : 15:13:30

no.4 : 15:13:33

no.5 : 15:13:36

no.6 : 15:13:39

no.7 : 15:13:42

no.8 : 15:13:45

no.9 : 15:13:48

另外:還可以通過pool.map將任務加入到程序池的等待佇列中。

pool.map(func,iter)

修改之前的**:

from multiprocessing import pool 

from time import sleep

from datetime import datetime

deftest

(num)

: sleep(3)

print

(num,

':', datetime.now(

).strftime(

'%h:%m:%s'))

return num

#建立程序池

pool = pool(processes =3)

li = pool.

map(func=test, iterable=

range(1

,10))

#關閉程序池

pool.close(

)#**程序池

pool.join(

)print

("返回值列表:"

, li)

執行結果:

gk@gk-vm:~/python$ python3 pool_test4.py 

1 : 15:49:03

2 : 15:49:03

3 : 15:49:03

4 : 15:49:06

5 : 15:49:06

6 : 15:49:06

7 : 15:49:09

8 : 15:49:09

9 : 15:49:09

返回值列表: [1, 2, 3, 4, 5, 6, 7, 8, 9]

python 程序 Python程序池

當需要建立的子程序數量不多時,可以直接利用multiprocessing中的process動態成生多個程序,但如果是上百甚至上千個目標,手動的去建立程序的工作量巨大,此時就可以用到multiprocessing模組提供的pool方法。初始化pool時,可以指定乙個最大程序數,當有新的請求提交到poo...

Python 程序,程序池

注意 程序池中的程序如果發生異常時,主程序中並不會得到異常提示。如果程序池中的程序要使用佇列 queue 實現程序間通訊,必須使用queue multiprocessing.manager queue 的方式建立佇列 需要先導入multiprocessing模組 demo.py 程序池 coding...

python中的程序池

coding utf 8 import multiprocessing import time deffunc msg print msg msg time.sleep 3 print end if name main pool multiprocessing.pool processes 3 fo...