進程

什么是進程方仿?
  • 一個程序運行起來后荣茫,代碼+用到的資源 稱之為進程丧慈,它是操作系統(tǒng)分配資源的基本單元馍迄。

進程的創(chuàng)建-multiprocessing

  • multiprocessing模塊就是跨平臺版本的多進程模塊艳吠,提供了一個Process類來代表一個進程對象麦备,這個對象可以理解為是一個獨立的進程,可以執(zhí)行另外的事情
from multiprocessing import Process
import time

def run_proc():
    """子進程要執(zhí)行的代碼"""
    while True:
           print("2")
           time.sleep(1)

if __name__ == '__main__':
    p = Process(target=run_proc)
    p.start()
    while True:
        print("1")
        time.sleep(1)

Process參數(shù)如下:

Process(group, target, name, args , kwargs)

  • target:如果傳遞了函數(shù)的引用昭娩,可以任務(wù)這個子進程就執(zhí)行這里的代碼
  • args:給target指定的函數(shù)傳遞的參數(shù)凛篙,以元組的方式傳遞
  • kwargs:給target指定的函數(shù)傳遞命名參數(shù)
  • name:給進程設(shè)定一個名字,可以不設(shè)定
  • group:指定進程組题禀,大多數(shù)情況下用不到

Process創(chuàng)建的實例對象的常用方法:

  • strart(): 啟動子進程實例(創(chuàng)建子進程)
  • is_alive(): 判斷進程子進程是否還在活著
  • join([timeout]): 是否等待子進程執(zhí)行結(jié)束鞋诗,或等待多少秒
  • terminate(): 不管任務(wù)是否完成,立即終止子進程

Process創(chuàng)建的實例對象的常用屬性:

  • name: 當(dāng)前進程的別名迈嘹,默認(rèn)為Process-N,N為1開始遞增的整數(shù)
  • pid: 當(dāng)前進程的pid(進程號)

進程間通信-Queue

  • Queue的使用 可以使用multiprocessing模塊的Queue實現(xiàn)多進程之間的數(shù)據(jù)傳遞削彬,Queue本身是一個消息列隊程序全庸,以下小實例來演示一下Queue的工作原理:
#coding=utf-8
from multiprocessing import Queue
q=Queue(3) #初始化一個Queue對象,最多可接收三條put消息
q.put("消息1")
q.put("消息2")
print(q.full()) #False
q.put("消息3")
print(q.full()) #True

#因為消息列隊已滿下面的try都會拋出異常融痛,第一個try會等待2秒后再拋出異常壶笼,第二個Try會立刻拋出異常
try:
    q.put("消息4",True,2)
except:
print("消息列隊已滿,現(xiàn)有消息數(shù)量:%s"%q.qsize())

try:
    q.put_nowait("消息4")
except:
    print("消息列隊已滿雁刷,現(xiàn)有消息數(shù)量:%s"%q.qsize())

#推薦的方式覆劈,先判斷消息列隊是否已滿,再寫入
if not q.full():
    q.put_nowait("消息4")

#讀取消息時沛励,先判斷消息列隊是否為空责语,再讀取
if not q.empty():
    for i in range(q.qsize()):
    print(q.get_nowait())
  • Queue.qsize():返回當(dāng)前隊列包含的消息數(shù)量;
  • Queue.empty():如果隊列為空目派,返回True坤候,反之False ;
  • Queue.full():如果隊列滿了企蹭,返回True,反之False白筹;
  • Queue.get(block, timeout):獲取隊列中的一條消息,然后將其從列隊中移除谅摄,block默認(rèn)值為True徒河;

進程池Pool

  • 當(dāng)需要創(chuàng)建的子進程數(shù)量不多時,可以直接利用multiprocessing中的Process動態(tài)成生多個進程送漠,但如果是上百甚至上千個目標(biāo)顽照,手動的去創(chuàng)建進程的工作量巨大,此時就可以用到multiprocessing模塊提供的Pool方法螺男。
  • 初始化Pool時棒厘,可以指定一個最大進程數(shù),當(dāng)有新的請求提交到Pool中時下隧,如果池還沒有滿奢人,那么就會創(chuàng)建一個新的進程用來執(zhí)行該請求;但如果池中的進程數(shù)已經(jīng)達到指定的最大值淆院,那么該請求就會等待何乎,直到池中有進程結(jié)束,才會用之前的進程來執(zhí)行新的任務(wù)土辩,請看下面的實例:
# -*- coding:utf-8 -*-
from multiprocessing import Pool
import os, time, random

def worker(msg):
t_start = time.time()
print("%s開始執(zhí)行,進程號為%d" % (msg,os.getpid()))
# random.random()隨機生成0~1之間的浮點數(shù)
time.sleep(random.random()*2)
t_stop = time.time()
print(msg,"執(zhí)行完畢支救,耗時%0.2f" % (t_stop-t_start))

po = Pool(3) # 定義一個進程池,最大進程數(shù)3
for i in range(0,10):
# Pool().apply_async(要調(diào)用的目標(biāo),(傳遞給目標(biāo)的參數(shù)元祖,))
# 每次循環(huán)將會用空閑出來的子進程去調(diào)用目標(biāo)
po.apply_async(worker,(i,))

print("----start----")

po.close() # 關(guān)閉進程池拷淘,關(guān)閉后po(進程池)不再接收新任務(wù)
po.join() # 等待po(進程池)中所有子進程執(zhí)行完成各墨,必須放在close語句之后

print("-----end-----")
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市启涯,隨后出現(xiàn)的幾起案子贬堵,更是在濱河造成了極大的恐慌恃轩,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黎做,死亡現(xiàn)場離奇詭異叉跛,居然都是意外死亡,警方通過查閱死者的電腦和手機蒸殿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門筷厘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宏所,你說我怎么就攤上這事酥艳。” “怎么了楣铁?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵玖雁,是天一觀的道長。 經(jīng)常有香客問我盖腕,道長,這世上最難降的妖魔是什么浓镜? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任溃列,我火速辦了婚禮,結(jié)果婚禮上膛薛,老公的妹妹穿的比我還像新娘听隐。我一直安慰自己,他們只是感情好哄啄,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布雅任。 她就那樣靜靜地躺著,像睡著了一般咨跌。 火紅的嫁衣襯著肌膚如雪沪么。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天锌半,我揣著相機與錄音禽车,去河邊找鬼。 笑死刊殉,一個胖子當(dāng)著我的面吹牛殉摔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播记焊,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼逸月,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了遍膜?” 一聲冷哼從身側(cè)響起碗硬,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤腐缤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肛响,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體岭粤,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年特笋,在試婚紗的時候發(fā)現(xiàn)自己被綠了剃浇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡猎物,死狀恐怖虎囚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蔫磨,我是刑警寧澤淘讥,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站堤如,受9級特大地震影響蒲列,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搀罢,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一蝗岖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧榔至,春花似錦抵赢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至枫弟,卻和暖如春邢享,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背媒区。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工驼仪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人袜漩。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓绪爸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親宙攻。 傳聞我的和親對象是個殘疾皇子奠货,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

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

  • 進程、進程的使用座掘、進程注意點递惋、進程間通信-Queue柔滔、進程池Pool、進程與線程對比萍虽、文件夾拷貝器-多任務(wù) 1.進...
    Cestine閱讀 810評論 0 0
  • 進程間通信——隊列和管道(multiprocess.Queue杉编、multiprocess.Pipe) 進程間通信 ...
    go以恒閱讀 1,782評論 0 3
  • 一超全、總體內(nèi)容 1.1、進程邓馒、程序的概念 1.2嘶朱、使用 Process 完成多進程- multiprocessing...
    IIronMan閱讀 763評論 0 1
  • 顧名思義,進程即正在執(zhí)行的一個過程光酣。進程是對正在運行程序的一個抽象疏遏。進程的概念起源于操作系統(tǒng),是操作系統(tǒng)最核心的概...
    SlashBoyMr_wang閱讀 1,137評論 0 2
  • "死鎖"是計算機操作系統(tǒng)中的一個專業(yè)名詞,百度百科是這樣對它進行解釋的:“死鎖是指兩個或兩個以上的...
    時丫丫閱讀 466評論 0 2