最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python process模塊的使用簡介

 更新時(shí)間:2021年05月14日 15:18:21   作者:小楊-先生  
在python中大部分情況需要使用多進(jìn)程,python提供了multiprocessing模塊。multiprocessing模塊的功能眾多:支持子進(jìn)程、通信和共享數(shù)據(jù)、執(zhí)行不同形式的同步,提供了Process、Queue、Pipe、Lock等組件。本文將著重講解process模塊的使用

process模塊

process模塊是一個(gè)創(chuàng)建進(jìn)程的模塊,借助這個(gè)模塊,就可以完成進(jìn)程的創(chuàng)建。

參數(shù)介紹:

Process(group=None, target=None, name=None, args=(), kwargs={})
​
1 group——參數(shù)未使用,值始終為None
2 target——表示調(diào)用對(duì)象,即子進(jìn)程要執(zhí)行的任務(wù)
3 args——表示調(diào)用對(duì)象的位置參數(shù)元組,args=(1,2,'egon',)
4 kwargs——表示調(diào)用對(duì)象的字典,kwargs={'name':'egon','age':18}
5 name——為子進(jìn)程的名稱

方法介紹:

obj.start():啟動(dòng)進(jìn)程,并調(diào)用該子進(jìn)程中的obj.run()
obj.run():進(jìn)程啟動(dòng)時(shí)運(yùn)行的方法,正是它去調(diào)用target指定的函數(shù),我們自定義類的類中一定要實(shí)現(xiàn)該方法
obj.terminate():強(qiáng)制終止進(jìn)程obj,不會(huì)進(jìn)行任何清理操作,如果obj創(chuàng)建了子進(jìn)程,該子進(jìn)程就成了僵尸進(jìn)程,使用該方法需要特別小心這種情況。如果obj還保存了一個(gè)鎖那么也將不會(huì)被釋放,進(jìn)而導(dǎo)致死鎖
obj.is_alive():如果obj仍然運(yùn)行,返回True
obj.join([timeout]):主線程等待obj終止(強(qiáng)調(diào):是主線程處于等的狀態(tài),而obj是處于運(yùn)行的狀態(tài))。timeout是可選的超時(shí)時(shí)間,需要強(qiáng)調(diào)的是,obj.join只能join住start開啟的進(jìn)程,而不能join住run開啟的進(jìn)程

屬性介紹:

obj.daemon:默認(rèn)值為False,如果設(shè)為True,代表obj為后臺(tái)運(yùn)行的守護(hù)進(jìn)程,當(dāng)obj的父進(jìn)程終止時(shí),obj也隨之終止,并且設(shè)定為True后,obj不能創(chuàng)建自己的新進(jìn)程,必須在obj.start()之前設(shè)置
obj.name:進(jìn)程的名稱
obj.pid:進(jìn)程的pid
obj.exitcode:進(jìn)程在運(yùn)行時(shí)為None、如果為–N,表示被信號(hào)N結(jié)束(了解即可)
obj.authkey:進(jìn)程的身份驗(yàn)證鍵,默認(rèn)是由os.urandom()隨機(jī)生成的32字符的字符串。這個(gè)鍵的用途是為涉及網(wǎng)絡(luò)連接的底層進(jìn)程間通信提供安全性,這類連接只有在具有相同的身份驗(yàn)證鍵時(shí)才能成功(了解即可)

1、在python中啟動(dòng)一個(gè)子進(jìn)程

from multiprocessing import Process
import os
​
def func():
    print('這是一個(gè)子進(jìn)程——>進(jìn)程號(hào):', os.getpid(), '  主進(jìn)程號(hào):', os.getppid())
​
​
if __name__ == '__main__':
    print('這是主進(jìn)程——>進(jìn)程號(hào):', os.getpid(), '  主進(jìn)程號(hào)(pycharm):', os.getppid())
    # 實(shí)例化一個(gè)子進(jìn)程對(duì)象
    obj = Process(target=func)
    obj.start()     # 執(zhí)行子進(jìn)程對(duì)象
    print('執(zhí)行了完了主進(jìn)程的內(nèi)容')
​
# 輸出
這是主進(jìn)程——>進(jìn)程號(hào): 3100   主進(jìn)程號(hào)(pycharm): 6748
執(zhí)行了完了主進(jìn)程的內(nèi)容
這是一個(gè)子進(jìn)程——>進(jìn)程號(hào): 2392   主進(jìn)程號(hào): 3100

2、給子進(jìn)程傳遞參數(shù)

from multiprocessing import Process
import os
​
​
def func(name, age):
    print('這是一個(gè)子進(jìn)程——>進(jìn)程號(hào):', os.getpid(), '  主進(jìn)程號(hào):', os.getppid())
    print(f'這是一個(gè)子進(jìn)程——>我的名字是{name},今年{age}')
​
​
if __name__ == '__main__':
    print('這是主進(jìn)程——>進(jìn)程號(hào):', os.getpid(), '  主進(jìn)程號(hào)(pycharm):', os.getppid())
    # 實(shí)例化一個(gè)子進(jìn)程對(duì)象
    obj = Process(target=func, args=('小楊', '18')) # args以元組的形式給子進(jìn)程func函數(shù)傳位置參數(shù)
                               # kwargs以字典的形式給子進(jìn)程func函數(shù)傳關(guān)鍵字參數(shù)
                               # kwargs={'name': '小楊', 'age': 18}
    obj.start()     # 執(zhí)行子進(jìn)程對(duì)象
    print('執(zhí)行了完了主進(jìn)程的內(nèi)容')
    
# 輸出
這是主進(jìn)程——>進(jìn)程號(hào): 11936   主進(jìn)程號(hào)(pycharm): 3676
執(zhí)行了完了主進(jìn)程的內(nèi)容
這是一個(gè)子進(jìn)程——>進(jìn)程號(hào): 2996   主進(jìn)程號(hào): 11936
這是一個(gè)子進(jìn)程——>我的名字是小楊,今年18

3、同時(shí)開多個(gè)子進(jìn)程

from multiprocessing import Process
import os
​
​
def func(name, age):
    print(f'這是一個(gè)子進(jìn)程——>進(jìn)程號(hào):{os.getpid()},主進(jìn)程號(hào):{os.getppid()},我的名字是{name},今年{age}')
​
​
if __name__ == '__main__':
    print('這是主進(jìn)程——>進(jìn)程號(hào):', os.getpid(), '  主進(jìn)程號(hào)(pycharm):', os.getppid())
    count = [('小楊', 18), ('鮑勃', 20), ('艾倫', 55)]
    for lis in count:
        # 實(shí)例化一個(gè)子進(jìn)程對(duì)象
        obj = Process(target=func, args=lis)   # args以元組的形式給子進(jìn)程func函數(shù)傳位置參數(shù)
        obj.start()     # 執(zhí)行子進(jìn)程對(duì)象
    print('執(zhí)行了完了主進(jìn)程的內(nèi)容')
    
# 輸出
這是主進(jìn)程——>進(jìn)程號(hào): 12632   主進(jìn)程號(hào)(pycharm): 9220
執(zhí)行了完了主進(jìn)程的內(nèi)容
這是一個(gè)子進(jìn)程——>進(jìn)程號(hào):10048,主進(jìn)程號(hào):12632,我的名字是小楊,今年18
這是一個(gè)子進(jìn)程——>進(jìn)程號(hào):16032,主進(jìn)程號(hào):12632,我的名字是鮑勃,今年20
這是一個(gè)子進(jìn)程——>進(jìn)程號(hào):12060,主進(jìn)程號(hào):12632,我的名字是艾倫,今年55

4、join的用法

obj.join([timeout]): 主進(jìn)程等待子進(jìn)程obj終止(強(qiáng)調(diào):是主進(jìn)程處于等的狀態(tài),而子進(jìn)程obj是處于運(yùn)行的狀態(tài))。timeout是可選的超時(shí)時(shí)間,需要強(qiáng)調(diào)的是,obj.join只能join住start開啟的進(jìn)程,而不能join住run開啟的進(jìn)程

多個(gè)進(jìn)程同時(shí)運(yùn)行(注意,子進(jìn)程的執(zhí)行順序不是根據(jù)啟動(dòng)順序決定的)

join——>屬于同步阻塞:

同步:在做A事件的時(shí)候發(fā)起B(yǎng)事件,必須等待B事件結(jié)束后才能繼續(xù)做A事件

阻塞:CPU不工作——>input accept recv recvfrom sleep connect......

start——>屬于異步非阻塞:

異步:在做A事件的時(shí)候發(fā)起B(yǎng)事件,不用等待B事件結(jié)束就可以繼續(xù)A事件

非阻塞:CPU在工作(非輸入輸出階段I/O)

from multiprocessing import Process
import random
import time
​
​
def mail(name, age):
    count = random.random()
    print(f'給{age}歲的{name}發(fā)了一封郵件!延遲{count}秒')
    time.sleep(count)      # 模擬網(wǎng)絡(luò)延遲
    """
    多個(gè)進(jìn)程同時(shí)運(yùn)行(注意,子進(jìn)程的執(zhí)行順序不是根據(jù)啟動(dòng)順序決定的)
    """
​
​
if __name__ == '__main__':
    info_list = [('小楊', 18), ('鮑勃', 20), ('艾倫', 55)]
    jo = []
    for info in info_list:
        obj = Process(target=mail, args=info)
        obj.start()
        jo.append(obj)
​
    # 將所有的子進(jìn)程全部放入jo列表,在循環(huán)join所有子進(jìn)程,就能等待所有子進(jìn)程結(jié)束后在做操作
    for o in jo:
        o.join()
​
    # 所有的子進(jìn)程結(jié)束的操作
    print('全部發(fā)送完畢')
    
# 輸出
給20歲的鮑勃發(fā)了一封郵件!延遲0.19840279388911186秒
給18歲的小楊發(fā)了一封郵件!延遲0.8891892863366903秒
給55歲的艾倫發(fā)了一封郵件!延遲0.0434307277609951秒
全部發(fā)送完畢

5、多進(jìn)程之間的數(shù)據(jù)是否隔離

from multiprocessing import Process
​
count = 1
​
def func():
    global count
    count += 1
​
if __name__ == '__main__':
    for i in range(10):
        obj = Process(target=func)
        obj.start()
    print(count)        # ————>1 主進(jìn)程的count沒有被改變說明進(jìn)程之間的數(shù)據(jù)時(shí)隔離的
    
# 輸出
1

6、為什么在Windows中Process()必須放到if __name__ == '__main__':下

由于Windows沒有fork,多處理模塊啟動(dòng)一個(gè)新的Python進(jìn)程并導(dǎo)入調(diào)用模塊。

如果在導(dǎo)入時(shí)調(diào)用Process(),那么這將啟動(dòng)無限繼承的新進(jìn)程(或直到機(jī)器耗盡資源)。

這是隱藏對(duì)Process()內(nèi)部調(diào)用的原,使用if __name__ == '__main__':,這個(gè)if語句中的語句將不會(huì)在導(dǎo)入時(shí)被調(diào)用。

以上就是python process模塊的使用簡介的詳細(xì)內(nèi)容,更多關(guān)于python process模塊的使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用django-suit為django 1.7 admin后臺(tái)添加模板

    使用django-suit為django 1.7 admin后臺(tái)添加模板

    前面我們介紹了Django-grappelli給admin添加模板,可是使用中發(fā)現(xiàn)inline有點(diǎn)問題,所以就換了今天我們要談的Django-suit,貌似要稍微好一些
    2014-11-11
  • 對(duì)python中url參數(shù)編碼與解碼的實(shí)例詳解

    對(duì)python中url參數(shù)編碼與解碼的實(shí)例詳解

    今天小編就為大家分享一篇對(duì)python中url參數(shù)編碼與解碼的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python 實(shí)現(xiàn)提取PPT中所有的文字

    python 實(shí)現(xiàn)提取PPT中所有的文字

    這篇文章主要介紹了python 實(shí)現(xiàn)提取PPT中所有的文字,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Pycharm更換python解釋器的方法

    Pycharm更換python解釋器的方法

    今天小編就為大家分享一篇Pycharm更換python解釋器的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python hashlib和hmac模塊使用方法解析

    Python hashlib和hmac模塊使用方法解析

    這篇文章主要介紹了Python hashlib和hmac模塊使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • python re.match()用法相關(guān)示例

    python re.match()用法相關(guān)示例

    這篇文章主要介紹了python re.match()用法相關(guān)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • python中的argparse基本用法(使用步驟)

    python中的argparse基本用法(使用步驟)

    argparse是一個(gè)python模塊,用途是:命令行選項(xiàng)、參數(shù)和子命令的解釋,這篇文章主要介紹了python中的argparse基本用法,需要的朋友可以參考下
    2023-04-04
  • 如何使用Python+ChatGPT批量生成論文

    如何使用Python+ChatGPT批量生成論文

    這篇文章主要介紹了用Python+ChatGPT批量生成論文,我用python+GPT-3?API開發(fā)了一個(gè)工具,可以直接從arxiv地址生成論文概述,需要的朋友可以參考下
    2023-02-02
  • Python新手們?nèi)菀追傅膸讉€(gè)錯(cuò)誤總結(jié)

    Python新手們?nèi)菀追傅膸讉€(gè)錯(cuò)誤總結(jié)

    python語言里面有一些小的坑,特別容易弄混弄錯(cuò),初學(xué)者若不注意的話,很容易坑進(jìn)去,下面我給大家深入解析一些這幾個(gè)坑,希望對(duì)初學(xué)者有所幫助,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。
    2017-04-04
  • Python2.7基于笛卡爾積算法實(shí)現(xiàn)N個(gè)數(shù)組的排列組合運(yùn)算示例

    Python2.7基于笛卡爾積算法實(shí)現(xiàn)N個(gè)數(shù)組的排列組合運(yùn)算示例

    這篇文章主要介紹了Python2.7基于笛卡爾積算法實(shí)現(xiàn)N個(gè)數(shù)組的排列組合運(yùn)算,涉及Python笛卡爾積算法及排列組合操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-11-11

最新評(píng)論

崇州市| 门头沟区| 邳州市| 桐城市| 峡江县| 吉林市| 河源市| 阿克陶县| 叶城县| 分宜县| 绥阳县| 溧阳市| 太仆寺旗| 铜川市| 集贤县| 板桥市| 黄山市| 青河县| 尉犁县| 大英县| 海门市| 乐亭县| 武夷山市| 当雄县| 双江| 招远市| 漾濞| 天长市| 体育| 营口市| 黑水县| 宁乡县| 宿迁市| 乐业县| 乐安县| 白山市| 长沙县| 仁寿县| 沙湾县| 镇坪县| 岑巩县|