在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`可能并不总是可靠的(尤其是在多线程或多进程环境中)。在这个例子中,我们仅将其作为一个简化的示例。