Python 3.x 中如何使用multiprocessing模組進行進程間通訊
隨著電腦技術的發展,我們在程式設計中經常需要同時執行多個任務。為了更好地利用多核心處理器,Python的multiprocessing模組提供了一套簡單而強大的工具來創建並發程式。 multiprocessing模組允許我們在Python中使用多個進程,這些進程可以同時執行並在需要時進行通訊。本文將介紹如何使用multiprocessing模組進行進程間通信,並提供對應的程式碼範例。
from multiprocessing import Process, Queue def worker(q): # 从队列中获取数据并处理 while True: data = q.get() if data is None: break # 处理数据 print("Worker got:", data) if __name__ == '__main__': # 创建一个队列 q = Queue() # 创建多个进程 processes = [] for i in range(3): p = Process(target=worker, args=(q,)) processes.append(p) p.start() # 往队列中放入数据 for i in range(10): q.put(i) # 添加结束标记到队列中 for i in range(3): q.put(None) # 等待进程结束 for p in processes: p.join()
在上述程式碼中,我們建立了一個worker函數,它透過Queue從佇列中取得資料並進行處理。然後我們創建了三個進程,每個進程都會執行worker函數。在主進程中,我們往佇列中放入了一些數據,並且加入了結束標記。最後,我們等待所有進程結束。
from multiprocessing import Process, Pipe def worker(conn): # 接收数据并打印 data = conn.recv() print("Worker got:", data) # 发送数据回主进程 conn.send("Hello from worker") # 关闭连接 conn.close() if __name__ == '__main__': # 创建一个管道 parent_conn, child_conn = Pipe() # 创建子进程 p = Process(target=worker, args=(child_conn,)) p.start() # 发送数据到子进程 parent_conn.send("Hello from main process") # 接收子进程的返回数据 data = parent_conn.recv() print("Main process got:", data) # 等待子进程结束 p.join()
在上述程式碼中,我們建立了一個worker函數,它透過Pipe接收主程序發送的資料並列印。然後它發送一條訊息回主進程。在主進程中,我們建立了一個管道,並把其中一個連接埠傳遞給子進程。然後我們發送一條訊息到子進程,並接收子進程的返回資料。最後,我們等待子進程結束。
總結:
使用multiprocessing模組進行進程間通訊非常簡單,它提供了Queue和Pipe兩個類別來實現進程間的資料傳輸。 Queue類別用於單向通信,透過put和get方法在進程之間傳遞資料。 Pipe類別用於雙向通信,透過send和recv方法在進程之間進行雙向通訊。無論是使用Queue還是Pipe,我們都可以輕鬆地在不同的進程之間傳遞數據,從而實現任務的並發執行和進程間的通訊。
以上是Python 3.x 中如何使用multiprocessing模組進行進程間通訊的詳細內容。更多資訊請關注PHP中文網其他相關文章!