問題描述:
最近遇到這樣乙個問題,要求使用 python3 ,開闢乙個程序池,裡面放乙個生產者程序,然後其他的都是消費者程序,程序間用 queue() 進行通訊。
問題分析:
問題很好解決,但是要注意一點,就是在使用 python 的程序池 pool() 時,queue() 可能會出錯,需要使用 manager().queue(), 算是乙個坑吧哈,現在總結一下。
python3實現:
# @time :2018/08/30
# @author :liuyinxing
from multiprocessing import pool, manager
import os, time, random
def producer(q): # 生產者程序
for i in range(50):
print('生產者程序', os.getpid(), '寫入佇列q:', i)
q.put(i)
def consumer(q): # 消費者程序
while true:
time.sleep(random.random() * 2)
try:
print('消費者程序', os.getpid(), '從佇列q讀出:', q.get(timeout=5))
except:
print('消費者程序', os.getpid(), '等待時間過長終止')
break
if __name__=='__main__':
print('父程序 id:', os.getpid())
q = manager().queue() # 建立 佇列
p = pool(4) # 建立乙個程序池
print('等待所有子程序準備完成...')
p.close() # 不能再新增程序了
p.join()
print('所有程序完成任務...')
python中程序間通訊
程序間通訊 磁碟互動 速度慢 不安全 socket 本地套接字 管道 訊息列隊 共享記憶體 訊號 訊號量 套接字 管道通訊 pipe 在記憶體中開闢一塊空間,對多個程序可見,通過管道 多個程序進行通訊 multiprocessing pipe fd1,fd2 pipe duplex true 功能 ...
vc 中程序間的通訊
vc 中程序間的通訊 2006 11 23 10 44 乙個是作業系統用來管理程序的核心物件。核心物件也是系統用來存放關於程序的統計資訊的地方 另乙個是位址空間,它包含所有的可執行模組或dll模組的 和資料。它還包含動態分配的空間。如執行緒堆疊和堆分配空間。每個程序被賦予它自己的虛擬位址空間,當程序...
vc 中程序間的通訊
程序通常被定義為乙個正在執行的程式的例項,它由兩個部分組成 乙個是作業系統用來管理程序的核心物件。核心物件也是系統用來存放關於程序的統計資訊的地方 另乙個是位址空間,它包含所有的可執行模組或dll模組的 和資料。它還包含動態分配的空間。如執行緒堆疊和堆分配空間。每個程序被賦予它自己的虛擬位址空間,當...