(七)7-5多進程


多進程和多線程的區別
多線程使用的是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
相關文章
相關標籤/搜索