Python多進程通信
Python的多進程通信提供了兩種方法:Queue、Pipes。兩者都在mutilprocessing模塊中提供。
接下來以Queue隊列為例,實現進程間的通信。在<font color = red>父進程</font>創建兩個<font color = red>子進程</font>,分別承擔生產、消費角色對同一個Queue進行操作。
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
'進程間通信'
'Process之間肯定是需要通信的,' \
'操作系統提供了很多機制來實現進程間的通信。' \
'Python的multiprocessing模塊包裝了底層的機制,' \
'提供了Queue、Pipes等多種方式來交換數據。'
__author__ = 'click'
__date__ = '2018/7/23 下午5:29'
from multiprocessing import Process, Queue
import time, random, os
# 網隊列中寫操作
def write(queue):
print('隊列的寫入操作')
for x in ['A', 'B', 'c']:
print('插入的內容是%s' % (x))
queue.put(x)
time.sleep(random.random())
# 讀操作
def read(queue):
print('隊列的讀操作')
# 這里要循環從隊列中讀取
while True:
s = queue.get(True)
print('隊列中讀取的內容是%s' % (s))
if __name__ == '__main__':
# 創建一個queue
q = Queue()
# 創建一個寫操作的進程
pw = Process(target=write, args=(q,))
# 創建一個讀操作的進程
pr = Process(target=read, args=(q,))
# 啟動進程
pw.start()
pr.start()
pw.join()
pr.terminate()
執行結果:
隊列的寫入操作
插入的內容是A
隊列的讀操作
隊列中讀取的內容是A
插入的內容是B
隊列中讀取的內容是B
插入的內容是c
隊列中讀取的內容是c
Queue作為參數在write、read方法中傳遞,write往隊列中添加數據。read從隊列中獲取新數據。并進行消費