python進程間通訊

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

1.1 Queue有兩個方法:

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

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

#!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()
  • 運行結果;
相關文章
相關標籤/搜索