多進程和多線程的區別
多線程使用的是cpu的一個核,適合io密集型
多進程使用的是cpu的多個核,適合運算密集型多線程
組件
Python提供很是好的多進程包如:multiprocessing
Multiprocessing支持紫禁城,通訊,共享數據,執行不一樣形式的同步,提供是ProcessPipe,lock等組件函數
multiprocessing 經常使用的方法this
# multiprocessing.active_children() 列出存在的子進程 # cpu_count() 統計cpu個數 例: import multiprocessing p = multiprocessing.cpu_count() m = multiprocessing.active_children() print p print m 運行結果: 4 []
Process
一、建立一個Process對象
p = multiprocessing.Process(target=worker, args=(5,))
注:target=函數名字
args= 函數須要的參數,以tuple的形式傳入
二、Process經常使用方法
is_alive() 判斷進程是否存在
run() 啓動進程
start() 啓動進程,會自動調用run方法
join(timeout) 等待進程結束或超時
三、Process經常使用屬性
name 進程名字
pid 進程的pid
例子:線程
import multiprocessing import time def worker(interval): time.sleep(interval) print "hell world!!!" if __name__ == "__main__": p = multiprocessing.Process(target=worker, args=(5,)) p.start() print p.pid print p.is_alive() p.join() # p.join(timeout=3) #等待紫禁城執行完畢或者超時退出 print "end main" print p.name print p.pid
運行結果:orm
17348 True hell world!!! end main Process-1 17348
多進程實例:對象
import time from datetime import datetime import multiprocessing now = datetime.strftime(datetime.now(),"%Y-%m-%d %H:%M:%S") def worker(name,interval): start = datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M:%S") print " {0} start {1}".format(name,start) time.sleep(interval) end = datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M:%S") print " {0} end {1}".format(name,end) if __name__ == "__main__": print "main start" print "this computer has {0} cpu".format(multiprocessing.cpu_count()) p1 = multiprocessing.Process(target=worker,args=("worker1",2)) p2 = multiprocessing.Process(target=worker,args=("worker2",3)) p3 = multiprocessing.Process(target=worker,args=("worker3",4)) p1.start() p2.start() p3.start() print multiprocessing.cpu_count() for p in multiprocessing.active_children(): print "this pid of {0} is {1}".format(p.name,p.pid) print "main end"
運行結果:blog
main start this computer has 4 cpu 4 this pid of Process-1 is 19872 this pid of Process-3 is 19008 this pid of Process-2 is 18844 main end worker1 start 2017-12-08 23:40:12 worker2 start 2017-12-08 23:40:12 worker3 start 2017-12-08 23:40:12 worker1 end 2017-12-08 23:40:14 worker2 end 2017-12-08 23:40:15 worker3 end 2017-12-08 23:40:16