黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

第十五章、python中的進程操作-開啟多進程

系統(tǒng) 1880 0

目錄

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

第十五章、python中的進程操作-開啟多進程

一、multprocess模塊

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

二、multprocess.process模塊

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

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

強調(diào):

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

參數(shù)介紹:

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

三、Process()對象方法介紹

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

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

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

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

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

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

四、Process()對象屬性介紹

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

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

          
            import time
from multiprocessing import Process

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

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

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

          
            from multiprocessing import Process
import time

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

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

          
        

七、守護進程

守護進程會隨著主進程的結束而結束。

由主進程創(chuàng)建守護進程

  其一:守護進程會在主進程代碼執(zhí)行結束后就終止

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

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

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



if __name__ == '__main__':
    p = Process(target=foo)
    p.daemon =True  # 把這個子進程定義為了守護進程
    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('進程 start')
    # print('---------------------    ',current_process().name)
    time.sleep(50)
    print('進程 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('主')
-------------------------------------------------
進程 start
True
False
主
          
        

九、pid和name屬性

          
            
class Myprocess(Process):
    def __init__(self,person):
        self.name=person   # name屬性是Process中的屬性,標示進程的名字
        super().__init__()  # 執(zhí)行父類的初始化方法會覆蓋name屬性
        # self.name = person  # 在這里設置就可以修改進程名字了
        # self.person = person  # 如果不想覆蓋進程名,就修改屬性名稱就可以了
    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)    #可以查看子進程的進程id
          
        

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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論