一、線程替代方案 1.subprocess (1)完全跳過線程,使用進程 (2)是派生進程的主要替代方案 (3)python2.4後引入 2.multiprocessing (1)使用threading介面派生,使用子進程 (2)允許為多核或者多CPU派生進程,介面很threading非常相似 (3 ...
一、線程替代方案
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.歡迎關註微信公眾號:傅里葉變換,個人公眾號,僅用於學習交流,後臺回覆”禮包“,獲取大數據學習資料