1. 程式人生 > >Python 多進程編程之multiprocessing--Process

Python 多進程編程之multiprocessing--Process

spa span 語句 檢測 設置 init 輸入一個整數 blog sel

Python 多進程編程之multiprocessing

1,Process

  • 跨平臺的進程創建模塊(multiprocessing), 支持跨平臺:windowx/linux
  • 創建和啟動
    創建格式:p=Process(target=函數名)
    ----def __init__(self, group=None, target=None, name=None, args=(), kwargs={}):
    group:分組(基本不用)
    target:表示這個進程實例所調用的對象.
    name:給進程起一個別名
    args:參數,表示調用對象的位置參數元組
    kwargs:表示調用對象的關鍵字參數字典

    註意:target後是函數名,一定要記住,是函數名,沒有括號
    帶括號的話,子進程就沒有創建,直接在主進程執行了
    啟動:p.start()

  • ----在主進程等待指令之前加入 p.join()
    這個命令叫做"阻塞",意思是讓主進程
    等待子進程結束之後,再執行join()之後的語句
    ----可以設置等待子進程時間 p.join(4)
    設置時間之後,主進程的阻塞時間只有4秒
  • 進程對象.is_alive()
    檢測進程是否活著
    ----會有2個返回值
    True:活著
    False:死了
  • 進程對象.terminate()
    ----不管進程是否結束,
    強制終止進程
  • 實例:從鍵盤輸入一個整數,分別開啟兩個進程來計算這個數的累加和和階乘。
    (第一個進程用系統提供給我們的類,第二個進程需要自己定義)
  • from multiprocessing import Process
    
    #方法1:
    def sumToN(n):
        s = 0
        for i in range(1,n+1):
            s += i
        print("累加和:%d"%s)
    
    #方法2:
    class JieCheng(Process):
        def __init__(self,n):
            Process.__init__(self)
            self.n = n
    
        def run(self):
            j = 1
            for i in range(1, self.n + 1):
                j *= i
            print("%d!=%d"%(self.n, j))
    
    if __name__ == "__main__":
        #輸入一個數:
        str_num = input("請輸入一個數:")
        num = int(str_num)
    
        #創建進程--計算
    #方法1: 系統提供給我們的類

    p1 = Process(target=sumToN,args=(num,))
    p1.start()

    #方法2:自己定義的類,也叫繼承系統類 p2 = JieCheng(num) p2.start()

Python 多進程編程之multiprocessing--Process