欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統 1628 0

目錄

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

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

一、multprocess模塊

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

二、multprocess.process模塊

Process類中的參數有如下

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

強調:

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

參數介紹:

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

三、Process()對象方法介紹

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

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

  • p.terminate() :強制終止進程p,不會進行任何清理操作,如果p創建了子進程,該子進程就成了僵尸進程,使用該方法需要特別小心這種情況。如果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)#在五秒內的第三秒進程就已經結束了
        print(p.is_alive()) # 代碼運行完了就算死了 False
        print('主')
                  
                
  • p.join([timeout]) :主線程等待p終止(強調:是主線程處于等的狀態,而p是處于運行的狀態)。timeout是可選的超時時間,需要強調的是,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() # 阻塞住主進程再等待子進程結束,然后再往下執行,(了解的是:內部會待用wait())
        print('主')
                  
                

四、Process()對象屬性介紹

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

五、使用process模塊創建進程

          
            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('執行主進程的內容了'
          
        

六、進程之間的數據隔離問題

          
            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) 

          
        

七、守護進程

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

由主進程創建守護進程

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

  其二:守護進程內無法再開啟子進程,否則拋出異常: 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)#第三秒的時候主進程結束了沒執行到這一步,不報錯
    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() # 給操作系統發了一個立即終止請求
    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__()  # 執行父類的初始化方法會覆蓋name屬性
        # self.name = person  # 在這里設置就可以修改進程名字了
        # self.person = person  # 如果不想覆蓋進程名,就修改屬性名稱就可以了
    def run(self):
        print('%s正在和網紅臉聊天' %self.name)
        # print('%s正在和網紅臉聊天' %self.person)
        time.sleep(random.randrange(1,5))
        print('%s正在和網紅臉聊天' %self.name)
        # print('%s正在和網紅臉聊天' %self.person)


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

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 成人日韩视频 | 午夜精品久久久久久久99黑人 | 一区二区精品 | www.天天色.com | 日本在线观看 | 欧美激情精品久久久久久变态 | 国产伦精品| 精品国产一区二区三区久久影院 | 精品无人区一区二区三 | 欧美成视频无需播放器 | 国产综合在线播放 | 日韩a级片 | 丁香亚洲| 两女互慰磨豆腐视频在线观看 | 深夜做爰性大片中文 | 亚洲综合五月天激动情网 | 久久久久久久久99精品 | 欧美日韩欧美日韩 | 中国一级大黄大黄大色毛片 | 九七婷婷狠狠成人免费视频 | 免费黄色在线 | 一级做a爰性视频 | 久久人人爱 | 久久精品天天中文字幕人 | 在线激情视频 | 欧美精品黄页在线观看大全 | 日韩午夜伦y4480私人影院 | 日韩欧美一区二区三区四区 | 色婷婷综合久久久中字幕精品久久 | 欧美黑人xxx | 天天操天天摸天天爽 | 草草草影院 | 亚洲欧美日韩精品久久亚洲区 | 国内精品久久毛片一区二区 | 免费一级毛片在线播放欧美 | 91久久艹| 女人色毛片女人色毛片中国 | 成年人xxxx | 国产在线不卡一区 | 久久在线播放 | 亚洲视频黄 |