python進程間通訊 queue pipe python進程間通訊

python進程間通訊

1 python提供了多種進程通訊的方式,主要Queue和Pipe這兩種方式,Queue用於多個進程間實現通訊,Pipe是兩個進程的通訊

1.1 Queue有兩個方法:

  • Put方法:以插入數據到隊列中,他還有兩個可選參數:blocked和timeout。詳情自行百度html

  • Get方法:從隊列讀取而且刪除一個元素。一樣,他還有兩個可選參數:blocked和timeout。詳情自行百度python

#!coding:utf-8 from multiprocessing import Process, Queue import os,time,random #寫數據進程執行的代碼 def proc_write(q,urls): print 'Process is write....' for url in urls: q.put(url) print 'put %s to queue... ' %url time.sleep(random.random()) #讀數據進程的代碼 def proc_read(q): print('Process is reading...') while True: url = q.get(True) print('Get %s from queue' %url) if __name__ == '__main__': #父進程建立Queue,並傳給各個子進程 q = Queue() proc_write1 = Process(target=proc_write,args=(q,['url_1','url_2','url_3'])) proc_write2 = Process(target=proc_write,args=(q,['url_4','url_5','url_6'])) proc_reader = Process(target=proc_read,args=(q,)) #啓動子進程,寫入 proc_write1.start() proc_write2.start() proc_reader.start() #等待proc_write1結束 proc_write1.join() proc_write2.join() #proc_raader進程是死循環,強制結束 proc_reader.terminate() 
  • 運行截圖:

1.2 Pipe通訊機制,

* Pipe經常使用於兩個進程,兩個進程分別位於管道的兩端

* Pipe方法返回(conn1,conn2)表明一個管道的兩個端,Pipe方法有duplex參數,默認爲True,即全雙工模式,若爲FALSE,conn1只負責接收信息,conn2負責發送,

* send和recv方法分別爲發送和接收信息。

#!coding:utf-8 import multiprocessing import os,time,random #寫數據進程執行的代碼 def proc_send(pipe,urls): #print 'Process is write....' for url in urls: print 'Process is send :%s' %url pipe.send(url) time.sleep(random.random()) #讀數據進程的代碼 def proc_recv(pipe): while True: print('Process rev:%s' %pipe.recv()) time.sleep(random.random()) if __name__ == '__main__': #父進程建立pipe,並傳給各個子進程 pipe = multiprocessing.Pipe() p1 = multiprocessing.Process(target=proc_send,args=(pipe[0],['url_'+str(i) for i in range(10) ])) p2 = multiprocessing.Process(target=proc_recv,args=(pipe[1],)) #啓動子進程,寫入 p1.start() p2.start() p1.join() p2.terminate() 
  • 運行結果;
相關文章
相關標籤/搜索