python_多線程/多進程(二)

python3的使用

下面分別是python 進一步封裝好的線程池 和進程池

from concurrent.futures import  ThreadPoolExecutor
from concurrent.futures import  ProcessPoolExecutor

import time

def task(arg):
    print(arg)
    time.sleep(1)
    
pool= ProcessPoolExecutor
pool= ThreadPoolExecutor

for i in range(50):
    pool.submit(task,i)

一孽亲、再次了解相同區(qū)別

進程:
優(yōu)點:同時利用多個cpu,能夠同時進行多個操作
缺點:耗費資源(因為給開辟內(nèi)存空間)
線程:
優(yōu)點:共享內(nèi)存,io操作的時候,創(chuàng)作并發(fā)操作
缺點:搶占資源
進程:不是越多越好,cpu個數(shù)等于進程個數(shù)
線程:也不是越多越好,具體案例具體分析,請求上下文切換耗時,計算機中執(zhí)行任務(wù)的最小單元是線程

二禀忆、目的

進程和線程目的:提高效率
Io操作不利用cpu:
IO密集型(不使用cpu):多線程----GIL全局解釋器鎖
計算密集型(使用cpu):多進程

三、進程

1.創(chuàng)建進程

from multiprocessing import Process

def test(n):
    print(n)

if __name__ == '__main__':

    for i in range(4):
        p = Process(target=test,args=(i,))
        p.start()

2.進程中的join等待落恼,等待進程結(jié)束運行下一個進程
未使用join運行結(jié)果

from multiprocessing import Process
import time
def test(n):
    print(n)
    time.sleep(2)
if __name__ == '__main__':

    for i in range(4):
        p = Process(target=test,args=(i,))
        p.start()

    print("end")
》》》
end
0
3
1
2

使用join

from multiprocessing import Process
import time
def test(n):
    print(n)
    time.sleep(2)
if __name__ == '__main__':
    for i in range(4):
        p = Process(target=test,args=(i,))
        p.start()
        #等待的意思
        p.join()

    print("end")箩退、
》》》
0
1
2
3
end

3.deamon 等同線程中setdeamon線程守護

from multiprocessing import Process
import time
def test(n):
    print(n)
    time.sleep(2)
if __name__ == '__main__':

    for i in range(4):
        p = Process(target=test,args=(i,))
        # 進程守護,結(jié)束都結(jié)束
        p.daemon = True
        p.start()


    print("end")

四佳谦、通過代碼理解進程

進程可以理解成是對主進程的copy~戴涝,也就是如果線程對一個列表操作的話,實際上是對同一個列表操作,進程操作的就是復(fù)制出來的列表

from multiprocessing import Process
import time
a_list = []
def test(n):
    a_list.append(n)
    print(a_list)

if __name__ == '__main__':
    for i in range(4):
        p = Process(target=test,args=(i,))
        p.start()


    print("end")
>>>
end
[0]
[1] 
[3]
[2]

五喊括、進程池

p = Pool(5)
p.apply          每一個任務(wù)都是排隊進行的胧瓜,相當(dāng)于自身包含個join方法
p.apply_async   每一個任務(wù)都是并發(fā)進行的,可以設(shè)置回調(diào)函數(shù)郑什,deamon=True府喳,等待線程

進程和線程其實還有一點區(qū)別,就是如果主線程執(zhí)行完畢蘑拯,其實子線程還是在運行的钝满,除非設(shè)置了保護線程。單進程不是這樣申窘,如果主進程結(jié)束了弯蚜,子進程也不會執(zhí)行

from multiprocessing import Pool
import time
def f1(a):
    time.sleep(1)
    print(a)
if __name__ == '__main__':
    pool = Pool(5)
    for i in range(10):
        pool.apply_async(func=f1,args=(i,))

上面的代碼運行結(jié)果沒有的,因為主進程結(jié)束了剃法,子進程還在sleep等待碎捺,主進程銷毀了子進程也跟著銷毀了
有兩種辦法解決,方法一主進程的結(jié)束時間大于子進程

from multiprocessing import Pool
import time
def f1(a):
    time.sleep(1)
    print(a)


if __name__ == '__main__':
    pool = Pool(5)
    for i in range(10):
        pool.apply_async(func=f1,args=(i,))

    time.sleep(2.5)

第二種使用join進程等待

from multiprocessing import Pool
import time
def f1(a):
    time.sleep(1)
    print(a)


if __name__ == '__main__':
    pool = Pool(5)
    for i in range(10):
        pool.apply_async(func=f1,args=(i,))
    pool.close()
    pool.join()

上面的代碼運行的時候五個為一個結(jié)果展示

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贷洲,一起剝皮案震驚了整個濱河市收厨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌优构,老刑警劉巖诵叁,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異钦椭,居然都是意外死亡拧额,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門彪腔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侥锦,“玉大人,你說我怎么就攤上這事漫仆∩诱” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵盲厌,是天一觀的道長。 經(jīng)常有香客問我祸泪,道長吗浩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任没隘,我火速辦了婚禮懂扼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己阀湿,他們只是感情好赶熟,可當(dāng)我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著陷嘴,像睡著了一般映砖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上灾挨,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天邑退,我揣著相機與錄音,去河邊找鬼劳澄。 笑死地技,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秒拔。 我是一名探鬼主播莫矗,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼砂缩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起梯轻,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤食磕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后喳挑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體曹宴,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年悼尾,在試婚紗的時候發(fā)現(xiàn)自己被綠了活翩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拉宗。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡旦事,死狀恐怖魁巩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情姐浮,我是刑警寧澤谷遂,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站卖鲤,受9級特大地震影響肾扰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛋逾,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一集晚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧区匣,春花似錦偷拔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至铸屉,卻和暖如春钉蒲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背彻坛。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人昌屉。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓钙蒙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親间驮。 傳聞我的和親對象是個殘疾皇子躬厌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,455評論 2 359

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

  • 又來到了一個老生常談的問題,應(yīng)用層軟件開發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢竞帽? 今天就這個問題開始扛施,來談?wù)劜?..
    tangsl閱讀 4,134評論 0 23
  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司屹篓,掛了不少疙渣,但最終還是拿到小米、百度堆巧、阿里妄荔、京東、新浪谍肤、CVTE啦租、樂視家的研發(fā)崗...
    時芥藍閱讀 42,272評論 11 349
  • Java-Review-Note——4.多線程 標(biāo)簽: JavaStudy PS:本來是分開三篇的,后來想想還是整...
    coder_pig閱讀 1,655評論 2 17
  • 我的生活已經(jīng)被埋沒在了生活里荒揣,似乎只有在抑郁篷角,傷感中才能想到自己,那忙碌的樣子是另外一個人系任。 解自己的鈴還需系鈴人...
    Roselyn楚英閱讀 256評論 0 0
  • 文/一個人的細水長流 生命是一條漫長而奔騰不息的河流恳蹲,有了夢想,就可以啟動青春的船赋除,駛向鮮花盛開的彼岸阱缓。青春如斯...
    麥子在南國不快樂閱讀 334評論 0 1