Python連載37-多進程、進程子類、進程父子id


一、線程替代方案

1.subprocess

(1)完全跳過線程,使用進程

(2)是派生進程的主要替代方案

(3)python2.4后引入

2.multiprocessing

(1)使用threading接口派生,使用子進程

(2)允許為多核或者多CPU派生進程,接口很threading非常相似

(3)python2.6

3.concurrent.futures

(1)新的異步執行模塊

(2)人物級別的操作

(3)python3.2之后引入

4.多進程

(1)進程間通訊(InterprocessCommunication,IPC)

(2)進程之間無任何共享狀態

(3)進程的創建

i.直接生成Process實例對象,舉例

 

import multiprocessing

from time import sleep,ctime

def clock(interval):

    while True:

        print("The time is %s" % ctime())

        sleep(interval)

 

if __name__ == "__main__":

    p = multiprocessing.Process(target= clock,args=(2,))

    p.start()

    #從運行就可以看出來主進程已經結束了,但是子線程仍然在運行着

    #和我們之前講的線程,有一個最大區別就是線程在主進程里面,主進程結束了,子線程就結束了

    #子線程從屬於進程,子進程與進程之間是並列關系

    #這里的程序停止,是我手動停止的

ii.派生子類

 

舉例:重寫子類,和我們之前講的線程的差不多,這里民重寫了最重要的兩個函數,一個是初始化子類,繼承父類的初始化,第二個就是運行函數

 

class ClockProcess(multiprocessing.Process):

    def __init__(self,interval):

        super().__init__()

        self.interval = interval

    def run(self):

        while True:

            print("The time is {0}".format(ctime()))

            sleep(self.interval)

if __name__ == "__main__":

    p2 = ClockProcess(2)

    p2.start()

iii.在os中查看pid,ppid以及他們的關系

 

def info(title):

    print(title)

    print("module name:",__name__)

    #得到父進程的id

    print("parent process:",os.getppid())

    #得到本身進程的id

    print("process id:",os.getpid())

def f(name):

    info("function f")

    print("hello",name)

if __name__ == "__main__":

    info("main line")

    print("==================================")

    p = multiprocessing.Process(target=f,args=("bob",))

    p.start()

    p.join()

 

解釋:先調用了一個函數,然后又調用了一個嵌套函數的函數  

四、源碼

d26_1_multiprocess_exercise.py

https://github.com/ruigege66/Python_learning/blob/master/d26_1_multiprocess_exercise.py

2.CSDN:https://blog.csdn.net/weixin_44630050(心悅君兮君不知-睿)

3.博客園:https://www.cnblogs.com/ruigege0000/

4.歡迎關注微信公眾號:傅里葉變換,個人公眾號,僅用於學習交流,后台回復”禮包“,獲取大數據學習資料

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM