(一)使用multiprocessing模塊創造多進程

1、Intro:

一、爬蟲開發中,實現多進程是十分重要的(多個任務同時進行)。python

二、時間片輪轉調度算法:全部進程輪流使用CPU,每一個進程佔用CPU的時間很短(100ms)。用戶看來彷彿全部的進程在不間斷運行。算法

三、進程->CPU分配資源的最小單位。多線程

  線程->程序執行的最小單位。函數

  一個進程由多個線程組成。spa

四、父進程與子進程:子進程在處理過程當中,只對父進程地址空間中的相關數據進行訪問,能夠保護父進程地址空間中與當前子進程執行任務無關的所有數據。線程

2、使用"multiprocessing"模塊的''Process"類創造多線程

 

編譯環境:python 2.7.1code

IDE:pycharmblog

保存爲進程

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'

運行結果ip

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 process 4 (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類實現進程間通訊

相關文章
相關標籤/搜索