Python 進(jìn)程池 multiprocessing.Pool - Python零基礎(chǔ)入門教程

目錄

零基礎(chǔ) Python 學(xué)習(xí)路線推薦 : Python 學(xué)習(xí)目錄 >> Python 基礎(chǔ)入門

Python 進(jìn)程池 Pool 和前面講解的** Python 線程池** 類似,雖然使用多進(jìn)程能提高效率榜掌,但是進(jìn)程的創(chuàng)建會消耗大量的計算機(jī)資源進(jìn)程 Process 的創(chuàng)建遠(yuǎn)遠(yuǎn)大于線程 Thread 創(chuàng)建占用的資源)叉寂,線程是計算機(jī)最小的運(yùn)行單位**橱夭,連線程都需要使用線程池器净,進(jìn)程有什么理由不使用進(jìn)程池?

需要注意的是齿税,在 Windows 上要想使用進(jìn)程模塊寞奸,就必須把有關(guān)進(jìn)程的代碼寫在if __name__ == ‘__main__’ 內(nèi),否則在 Windows 下使用進(jìn)程模塊會產(chǎn)生異常括丁。 Unix / Linux 下則不需要荞下。

一.Python 進(jìn)程池 multiprocessing.Pool 介紹

Pool 類可以提供指定數(shù)量的進(jìn)程供用戶調(diào)用,當(dāng)有新的請求提交到 Pool 中時史飞,如果池還沒有滿尖昏,就會創(chuàng)建一個新的進(jìn)程來執(zhí)行請求。如果池滿构资,請求就會告知先等待抽诉,直到池中有進(jìn)程結(jié)束,才會創(chuàng)建新的進(jìn)程來執(zhí)行這些請求蚯窥。

# 導(dǎo)入進(jìn)程模塊

import multiprocessing



# 最多允許3個進(jìn)程同時運(yùn)行

pool = multiprocessing.Pool(processes = 3)

1掸鹅、apply — 該函數(shù)用于傳遞不定參數(shù),主進(jìn)程會被阻塞直到函數(shù)執(zhí)行結(jié)束(不建議使用拦赠,并且 3.x 以后不在出現(xiàn))巍沙,函數(shù)原型如下:

apply(func, args=(), kwds={})

**2、apply_async **— 與 apply 用法一致荷鼠,但它是非阻塞的且支持結(jié)果返回后進(jìn)行回調(diào)句携,函數(shù)原型如下:

apply_async(func[, args=()[, kwds={}[, callback=None]]])

3、map — Pool 類中的 map 方法允乐,與內(nèi)置的 map 函數(shù)用法基本一致矮嫉,它會使進(jìn)程阻塞直到結(jié)果返回,函數(shù)原型如下:

map(func, iterable, chunksize=None)

注意:雖然第二個參數(shù)是一個迭代器牍疏,但在實際使用中蠢笋,必須在整個隊列都就緒后,程序才會運(yùn)行子進(jìn)程鳞陨。

**4昨寞、map_async **— 與 map 用法一致,但是它是非阻塞的。其有關(guān)事項見 apply_async援岩,函數(shù)原型如下:

map_async(func, iterable, chunksize, callback)

5歼狼、close — 關(guān)閉進(jìn)程池(pool),使其不在接受新的任務(wù)享怀。

6羽峰、terminal — 結(jié)束工作進(jìn)程,不在處理未處理的任務(wù)添瓷。

7梅屉、join主進(jìn)程阻塞等待子進(jìn)程的退出, join 方法要在 close 或 terminate 之后使用鳞贷。

二.Python 進(jìn)程池 multiprocessing.Pool 使用

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿說編程
@Blog(個人博客地址): www.codersrc.com
@File:Python 進(jìn)程池 multiprocessing.Pool.py
@Time:2021/05/09 07:37
@Motto:不積跬步無以至千里履植,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累悄晃!

"""


import multiprocessing
import time


def func(msg):
    print("in:", msg)
    time.sleep(3)
    print("out,", msg)

if __name__ == "__main__":
    # 這里設(shè)置允許同時運(yùn)行的的進(jìn)程數(shù)量要考慮機(jī)器cpu的數(shù)量,進(jìn)程的數(shù)量最好別小于cpu的數(shù)量凿滤,
    # 因為即使大于cpu的數(shù)量妈橄,增加了任務(wù)調(diào)度的時間,效率反而不能有效提高
    pool = multiprocessing.Pool(processes = 3)
    item_list = ['processes1' ,'processes2' ,'processes3' ,'processes4' ,'processes5' ,]
    count = len(item_list)
    for item in item_list:
        msg = "python教程 %s" %item
        # 維持執(zhí)行的進(jìn)程總數(shù)為processes翁脆,當(dāng)一個進(jìn)程執(zhí)行完畢后會添加新的進(jìn)程進(jìn)去
        pool.apply_async(func, (msg,))

    pool.close()
    pool.join()  # 調(diào)用join之前眷蚓,先調(diào)用close函數(shù),否則會出錯反番。執(zhí)行完close后不會有新的進(jìn)程加入到pool,join函數(shù)等待所有子進(jìn)程結(jié)束

'''
輸出結(jié)果:

in: python教程 processes1
in: python教程 processes2
in: python教程 processes3
out, python教程 processes1
in: python教程 processes4
out, python教程 processes2
in: python教程 processes5
out, python教程 processes3
out, python教程 processes4
out, python教程 processes5
'''

代碼分析:

5 個任務(wù)沙热,3 個進(jìn)程,由于在進(jìn)程池構(gòu)造的時候允許同時最多執(zhí)行 3 個進(jìn)程罢缸,所以同時執(zhí)行任務(wù) 1 / 任務(wù) 2 / 任務(wù) 3篙贸,重代碼的輸出結(jié)果來看,任務(wù) 1 / 任務(wù) 2 / 任務(wù) 3 執(zhí)行后枫疆,for 循環(huán)進(jìn)入阻塞狀態(tài)爵川,直到任務(wù) 1 / 任務(wù) 2 / 任務(wù) 3 其中一個結(jié)束之后才會 for 才會繼續(xù)執(zhí)行任務(wù) 4 / 任務(wù) 5,并保證同時執(zhí)行的最多只有 3 個任務(wù)( 進(jìn)程池 multiprocessing.Pool線程池 ThreadPoolExecutor 原理相同).

三.猜你喜歡

  1. Python 條件推導(dǎo)式
  2. Python 列表推導(dǎo)式
  3. Python 字典推導(dǎo)式
  4. Python 不定長參數(shù) *argc/**kargcs
  5. Python 匿名函數(shù) lambda
  6. Python return 邏輯判斷表達(dá)式
  7. Python is 和 == 區(qū)別
  8. Python 可變數(shù)據(jù)類型和不可變數(shù)據(jù)類型
  9. Python 淺拷貝和深拷貝
  10. Python 異常處理
  11. Python 線程創(chuàng)建和傳參
  12. Python 線程互斥鎖 Lock
  13. Python 線程時間 Event
  14. Python 線程條件變量 Condition
  15. Python 線程定時器 Timer
  16. Python 線程信號量 Semaphore
  17. Python 線程障礙對象 Barrier
  18. Python 線程隊列 Queue – FIFO
  19. Python 線程隊列 LifoQueue – LIFO
  20. Python 線程優(yōu)先隊列 PriorityQueue
  21. Python 線程池 ThreadPoolExecutor(一)
  22. Python 線程池 ThreadPoolExecutor(二)
  23. Python 進(jìn)程 Process 模塊
  24. Python 進(jìn)程 Process 與線程 threading 區(qū)別
  25. Python 進(jìn)程間通信 Queue / Pipe

未經(jīng)允許不得轉(zhuǎn)載:猿說編程 ? Python 進(jìn)程池 multiprocessing.Pool

本文由博客 - 猿說編程 猿說編程 發(fā)布息楔!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寝贡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子值依,更是在濱河造成了極大的恐慌圃泡,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愿险,死亡現(xiàn)場離奇詭異颇蜡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門澡匪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來熔任,“玉大人,你說我怎么就攤上這事唁情∫商Γ” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵甸鸟,是天一觀的道長惦费。 經(jīng)常有香客問我,道長抢韭,這世上最難降的妖魔是什么薪贫? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮刻恭,結(jié)果婚禮上瞧省,老公的妹妹穿的比我還像新娘。我一直安慰自己鳍贾,他們只是感情好鞍匾,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著骑科,像睡著了一般橡淑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上咆爽,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天梁棠,我揣著相機(jī)與錄音,去河邊找鬼斗埂。 笑死符糊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜜笤。 我是一名探鬼主播濒蒋,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼把兔!你這毒婦竟也來了沪伙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤县好,失蹤者是張志新(化名)和其女友劉穎围橡,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缕贡,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡翁授,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年拣播,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片收擦。...
    茶點(diǎn)故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡贮配,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出塞赂,到底是詐尸還是另有隱情泪勒,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布宴猾,位于F島的核電站圆存,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏仇哆。R本人自食惡果不足惜沦辙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望讹剔。 院中可真熱鬧油讯,春花似錦、人聲如沸延欠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衫冻。三九已至,卻和暖如春谒出,著一層夾襖步出監(jiān)牢的瞬間隅俘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工笤喳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留为居,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓杀狡,卻偏偏與公主長得像蒙畴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子呜象,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容