python 進程間通訊(上)

一  使用queue來實現進程間的內存共享python

#_*_coding:utf-8_*_
from  multiprocessing import Process,Queue
import os,time
def f(q,n):
    q.put([n,'hello'])
if __name__ == '__main__':
    #此queue不是直接導入的import Queue,這個是multiprocessing從新封裝的
    q=Queue()
    #循環6個進程
    for i in range(5):
           p=Process(target=f,args=(q,i))
           p.start()
    #等待子進程完畢後在繼續執行
    p.join()
    for i in range(q.qsize()):
         print q.get()

顯示效果以下:ui

[0, 'hello', {'aa': 'bb'}]
[1, 'hello', {'aa': 'bb'}]
[2, 'hello', {'aa': 'bb'}]
[3, 'hello', {'aa': 'bb'}]
[4, 'hello', {'aa': 'bb'}]spa

在隊列中能夠存儲列表,字典等類型,仍是很方便的。可是python間進程間共享內存  並非真正意義的而是須要利用第三方來實現queue就是線程

 

 

二進程鎖LOCKcode

#_*_coding:utf-8_*_
from  multiprocessing import Process,Lock
import os,time
def f(l,i):
    #加鎖
    l.acquire()
    print 'hello',i
    #釋放鎖
    l.release()
if __name__ == '__main__':
    lock=Lock()
    for i in range(5):
           p=Process(target=f,args=(lock,i)).start()
                                                   

顯示效果:blog

hello 0
hello 1
hello 2
hello 3
hello 4隊列

這個lock是徹底復刻的線程鎖 ,沒有什麼改動。進程間自己內存就是獨立的,沒有什麼徵用資源的問題,因此這個把鎖用處不大,可是有的時候可能須要,好比當終端顯示的時候,多個進程都用的同一個終端顯示。進程

看看父進程和子進程關係ip

相關文章
相關標籤/搜索