python 進程間通信(上)


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

#_*_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()

顯示效果如下:

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

在隊列中可以存儲列表,字典等類型,還是很方便的。但是python間進程間共享內存  並不是真正意義的而是需要利用第三方來實現queue就是

 

 

二進程鎖LOCK

#_*_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()
                                                   

顯示效果:

hello 0
hello 1
hello 2
hello 3
hello 4

這個lock是完全復刻的線程鎖 ,沒有什么改動。進程間本身內存就是獨立的,沒有什么征用資源的問題,所以這個把鎖用處不大,但是有的時候可能需要,比如當終端顯示的時候,多個進程都用的同一個終端顯示。

看看父進程和子進程關系

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM