亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

第十五章、python中的進(jìn)程操作-開啟多進(jìn)程

系統(tǒng) 1749 0

目錄

  • 第十五章、python中的進(jìn)程操作-開啟多進(jìn)程
    • 一、multprocess模塊
    • 二、multprocess.process模塊
    • 三、Process()對象方法介紹
    • 四、Process()對象屬性介紹
    • 五、使用process模塊創(chuàng)建進(jìn)程
    • 六、進(jìn)程之間的數(shù)據(jù)隔離問題
    • 七、守護(hù)進(jìn)程
    • 八、terminate方法
    • 九、pid和name屬性

第十五章、python中的進(jìn)程操作-開啟多進(jìn)程

一、multprocess模塊

multiprocess不是一個模塊而是python中一個操作、管理進(jìn)程的包。 在這個包中幾乎包含了和進(jìn)程有關(guān)的所有子模塊,將這部分大致分為四個部分:創(chuàng)建進(jìn)程部分,進(jìn)程同步部分,進(jìn)程池部分,進(jìn)程之間數(shù)據(jù)共享。

二、multprocess.process模塊

Process類中的參數(shù)有如下

          
            group=None, target=None, name=None, args=(), kwargs={}
----------------------------------------------------------
eg:p = Process(target=foo)#實(shí)例化出p子進(jìn)程對象
          
        

強(qiáng)調(diào):

  1. 需要使用關(guān)鍵字的方式來指定參數(shù)
  2. args指定的為傳給target函數(shù)的位置參數(shù),是一個元組形式,必須有逗號

參數(shù)介紹:

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

三、Process()對象方法介紹

  • p.start() :啟動進(jìn)程,并調(diào)用該子進(jìn)程中的p.run()

  • p.run() :進(jìn)程啟動時運(yùn)行的方法,正是它去調(diào)用target指定的函數(shù),我們自定義類的類中一定要實(shí)現(xiàn)該方法

  • p.terminate() :強(qiáng)制終止進(jìn)程p,不會進(jìn)行任何清理操作,如果p創(chuàng)建了子進(jìn)程,該子進(jìn)程就成了僵尸進(jìn)程,使用該方法需要特別小心這種情況。如果p還保存了一個鎖那么也將不會被釋放,進(jìn)而導(dǎo)致死鎖

  • p.is_alive() :如果p仍然運(yùn)行,返回True

                  
                    from  multiprocessing import Process,current_process
    import time
    def foo():
        print('進(jìn)程 start')
        time.sleep(2)
        print('進(jìn)程 end')
    if __name__ == '__main__':
        p = Process(target=foo)
        p.start()
        print(p.is_alive()) # True#打印與子進(jìn)程同時進(jìn)行
        time.sleep(5)#在五秒內(nèi)的第三秒進(jìn)程就已經(jīng)結(jié)束了
        print(p.is_alive()) # 代碼運(yùn)行完了就算死了 False
        print('主')
                  
                
  • p.join([timeout]) :主線程等待p終止(強(qiáng)調(diào):是主線程處于等的狀態(tài),而p是處于運(yùn)行的狀態(tài))。timeout是可選的超時時間,需要強(qiáng)調(diào)的是,p.join只能join住start開啟的進(jìn)程,而不能join住run開啟的進(jìn)程

                  
                    from multiprocessing import Process
    import time
    def foo():
        print('進(jìn)程  start ')
        time.sleep(2.3)
        print('進(jìn)程  end ')
    
    if __name__ == '__main__':
        p = Process(target=foo)
        p.start() #
        # 核心需求就是
        # time.sleep(5)
        p.join() # 阻塞住主進(jìn)程再等待子進(jìn)程結(jié)束,然后再往下執(zhí)行,(了解的是:內(nèi)部會待用wait())
        print('主')
                  
                

四、Process()對象屬性介紹

  • p.daemon :默認(rèn)值為False,如果設(shè)為True,代表p為后臺運(yùn)行的守護(hù)進(jìn)程,當(dāng)p的父進(jìn)程終止時,p也隨之終止,并且設(shè)定為True后,p不能創(chuàng)建自己的新進(jìn)程,必須在 p.start() 之前設(shè)置
  • p.name :進(jìn)程的名稱
  • p.pid :進(jìn)程的pid

五、使用process模塊創(chuàng)建進(jìn)程

          
            import time
from multiprocessing import Process

def f(name):
    print('hello', name)
    print('我是子進(jìn)程')

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    time.sleep(1)
    print('執(zhí)行主進(jìn)程的內(nèi)容了'
          
        

六、進(jìn)程之間的數(shù)據(jù)隔離問題

          
            from multiprocessing import Process
import time

x = 0
def task():
    global x
    x = 100
    print('子進(jìn)程的x修改為了{(lán)}'.format(x))

if __name__ == '__main__':
    p = Process(target=task)
    p.start()
    time.sleep(5)
    print(x) 

          
        

七、守護(hù)進(jìn)程

守護(hù)進(jìn)程會隨著主進(jìn)程的結(jié)束而結(jié)束。

由主進(jìn)程創(chuàng)建守護(hù)進(jìn)程

  其一:守護(hù)進(jìn)程會在主進(jìn)程代碼執(zhí)行結(jié)束后就終止

  其二:守護(hù)進(jìn)程內(nèi)無法再開啟子進(jìn)程,否則拋出異常: AssertionError: daemonic processes are not allowed to have children

          
            from multiprocessing import Process
import time
def foo():
    print('守護(hù)進(jìn)程 start')
    time.sleep(5)
    print('守護(hù)進(jìn)程 end')
    p = Process(target=foo)#第三秒的時候主進(jìn)程結(jié)束了沒執(zhí)行到這一步,不報錯
    p.start()

if __name__ == '__main__':
    p = Process(target=foo)
    p.daemon =True  # 把這個子進(jìn)程定義為了守護(hù)進(jìn)程,
    p.start()
    time.sleep(2)#子進(jìn)程還沒有結(jié)束,主進(jìn)程結(jié)束了強(qiáng)制子進(jìn)程提前結(jié)束
    print('主')
          
        
          
            from multiprocessing import Process
import time
def foo():
    print('守護(hù)進(jìn)程 start')
    time.sleep(2)
    print('守護(hù)進(jìn)程 end')
    p = Process(target=foo)
    p.start()



if __name__ == '__main__':
    p = Process(target=foo)
    p.daemon =True  # 把這個子進(jìn)程定義為了守護(hù)進(jìn)程
    p.start()
    time.sleep(3)
    print('主')
------------------------------------------------------
#報錯:AssertionError: daemonic processes are not allowed to have children
          
        

八、terminate方法

          
            from  multiprocessing import Process,current_process
import time
def foo():
    print('進(jìn)程 start')
    # print('---------------------    ',current_process().name)
    time.sleep(50)
    print('進(jìn)程 end')


if __name__ == '__main__':
    p = Process(target=foo)
    p.start()
    time.sleep(0.45)#start比terminate慢大約0.45秒
    p.terminate() # 給操作系統(tǒng)發(fā)了一個立即終止請求
    print(p.is_alive()) # True
    p.join()
    print(p.is_alive()) # False
    print('主')
-------------------------------------------------
進(jìn)程 start
True
False
主
          
        

九、pid和name屬性

          
            
class Myprocess(Process):
    def __init__(self,person):
        self.name=person   # name屬性是Process中的屬性,標(biāo)示進(jìn)程的名字
        super().__init__()  # 執(zhí)行父類的初始化方法會覆蓋name屬性
        # self.name = person  # 在這里設(shè)置就可以修改進(jìn)程名字了
        # self.person = person  # 如果不想覆蓋進(jìn)程名,就修改屬性名稱就可以了
    def run(self):
        print('%s正在和網(wǎng)紅臉聊天' %self.name)
        # print('%s正在和網(wǎng)紅臉聊天' %self.person)
        time.sleep(random.randrange(1,5))
        print('%s正在和網(wǎng)紅臉聊天' %self.name)
        # print('%s正在和網(wǎng)紅臉聊天' %self.person)


p1=Myprocess('哪吒')
p1.start()
print(p1.pid)    #可以查看子進(jìn)程的進(jìn)程id
          
        

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 99热精品在线免费观看 | 久久影视免费体验区午夜啪啪 | 一本久道热中字伊人 | 不卡一级毛片免费高清 | 日本欧美一区二区三区在线 | 久久91精品国产91久久 | 狠狠色噜噜狠狠狠狠米奇777 | 国产九九在线观看播放 | 一级香蕉免费毛片 | 婷婷综合在线观看丁香 | 在线成人免费视频 | 一级特黄aaa大片在线观看 | 欧美日韩亚洲第一页 | 草草影院1 | 久久精品国产eeuss | 国产精品午夜久久 | 欧美 亚洲 另类 热图 | 男人猛桶女人下面视频国产 | 欧美一级精品高清在线观看 | 欧美综合天天夜夜久久 | 在线视频中文 | 在线观看国产欧美 | 亚洲 国产 路线1路线2路线 | 国产一级做a爱片久久毛片a | 青青影院在线观看 | 日韩视频精品 | 真人午夜a一级毛片 | 成人在线小视频 | 亚洲不卡在线视频 | xxxx免费国产在线视频 | 一区二区三区美女视频 | 成人免费草草视频 | 成人在线视频网 | 国产综合视频 | 曰本色wa | 欧美国产精品亚洲精品第一区 | 国产精品66 | 日本香蕉视频在线观看 | 国产午夜亚洲精品久久www | 夜夜夜夜夜夜爽噜噜噜噜噜噜 | 99久久综合九九亚洲 |