(一)使用multiprocessing模塊創造多進程
阿新 • • 發佈:2017-10-18
進程間通信 target 其他 時間片輪轉 代碼 字符 bob def pan
一、Intro:
1、爬蟲開發中,實現多進程是十分重要的(多個任務同時進行)。
2、時間片輪轉調度算法:所有進程輪流使用CPU,每個進程占用CPU的時間很短(100ms)。用戶看來仿佛所有的進程在不間斷運行。
3、進程->CPU分配資源的最小單位。
線程->程序執行的最小單位。
一個進程由多個線程組成。
4、父進程與子進程:子進程在處理過程中,只對父進程地址空間中的相關數據進行訪問,可以保護父進程地址空間中與當前子進程執行任務無關的全部數據。
二、使用"multiprocessing"模塊的‘‘Process"類創造多線程
編譯環境:python 2.7.1
IDE:pycharm
保存為
import os from multiprocessing import Process def run_proc(name): print ‘Child process %s (%s) Running...‘ % (name,os.getpid()) if __name__ == ‘__main__‘: print ‘parent process %s.‘ % os.getpid() for i in range(5): p = Process(target=run_proc,args=(str(i),)) print‘Process will start.‘ p.start() p.join() print ‘Process End‘
運行結果
parent process 1072. Process will start. Process will start. Process will start. Process will start. Process will start. Child process 0 (6676) Running... Child process 1 (6752) Running... Child process 2 (6864) Running... Child process4 (6768) Running... Child process 3 (6580) Running... Process End Process finished with exit code 0
(1)定義run_proc函數,傳遞name參數並用os.getpid獲得當前進程的進程號
if __name__ == ‘__main__‘: 如果在其他代碼中調用本代碼的函數,該if條件之後的代碼將不會被執行,因為__name__ != ‘__main__‘
例如,在另一個文件tmp.py中調用run_proc函數:
import p17 p17.run_proc(1)
Child process 1 (7120) Running... Process finished with exit code 0
當然也可以采用from...import...
from p17 import run_proc run_proc(1)
(2)for i in range(5): 段
即在當前的父進程下,創建5個子進程。python官方手冊對Process類給予了更加易懂的版本:
from multiprocessing import Process def f(name): print ‘hello‘, name if __name__ == ‘__main__‘: p = Process(target=f, args=(‘bob‘,)) p.start() p.join()
Process類需要傳遞兩個參數,target即在f所調用進程下 再創造一個子進程。args後接字符,用於子進程命名。start()方法和join()方法分別實現子進程的啟動和激活進程間通訊。
下期預告:
(1)使用multiprocessing模塊的pool類產生大量子進程
(2)使用Queue類和Pipe類實現進程間通信
(一)使用multiprocessing模塊創造多進程