python 多进程通信模块的简单实现


在Python中,多进程通信可以通过多种方式实现,例如使用`multiprocessing`模块中的`Queue`、`Pipe`或`Manager`等。这里我将提供一个简单的使用`multiprocessing.Queue`实现多进程通信的例子。


import multiprocessing
import time

def worker(queue):
    """
    工作进程函数,模拟数据处理并发送结果
    """
    for i in range(5):
        time.sleep(1)  # 模拟耗时操作
        result = f"处理结果-{i}"
        print(f"工作进程: 发送 {result}")
        queue.put(result)  # 将结果发送到队列

if __name__ == '__main__':
    # 创建一个队列
    queue = multiprocessing.Queue()
    
    # 创建一个工作进程
    p = multiprocessing.Process(target=worker, args=(queue,))
    p.start()
    
    # 主进程接收工作进程发送的数据
    while True:
        if not queue.empty():
            result = queue.get()
            print(f"主进程: 接收 {result}")
        else:
            time.sleep(0.5)  # 如果没有数据,则短暂等待
        
        # 假设我们知道工作进程何时完成
        if queue.qsize() == 0:  # 这里仅作为示例,实际中可能需要其他机制来检测进程结束
            break
    
    p.join()  # 等待工作进程结束
    print("所有数据处理完成。")

这个例子中,我们创建了一个`multiprocessing.Queue`实例用于多进程间的通信。`worker`函数模拟了一个工作进程,它会将处理结果发送到队列中。主进程则不断检查队列是否有数据,如果有,则取出并打印。这里使用了`queue.empty()`和`queue.get()`方法来检查队列是否为空和从队列中获取数据。注意,在实际应用中,你可能需要更复杂的机制来检测工作进程何时完成,因为简单的`queue.qsize() == 0`可能并不总是可靠的(尤其是在多线程或多进程环境中)。在这个例子中,我们仅将其作为一个简化的示例。