MST
星途 面试题库

面试题:Python中multiprocessing模块进程间通信方式

在Python的multiprocessing模块中,有哪些常见的进程间通信方式?请简述每种方式的特点,并给出使用Queue进行进程间通信的简单示例代码。
50.3万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

常见进程间通信方式及特点

  1. Queue(队列)
    • 特点:先进先出(FIFO)的数据结构,用于在不同进程间安全地传递数据。多个进程可以向队列中放入数据,也可以从队列中取出数据,内部实现了同步机制,确保多进程访问时数据的一致性和安全性。
  2. Pipe(管道)
    • 特点:分为单向管道和双向管道。单向管道只能一端发送数据,另一端接收数据;双向管道则两端都能收发数据。管道通信相对简单直接,但它的使用场景相对局限于两个进程之间的通信。
  3. Value和Array
    • 特点:用于在进程间共享简单的数据类型(Value)或数组(Array)。它们基于共享内存实现,性能较高,适合需要共享少量数据且频繁访问的场景。但由于直接操作共享内存,需要自行处理同步问题,如使用锁来防止数据竞争。

使用Queue进行进程间通信的示例代码

import multiprocessing


def producer(queue):
    for i in range(5):
        queue.put(i)
        print(f"Produced: {i}")


def consumer(queue):
    while True:
        item = queue.get()
        if item is None:
            break
        print(f"Consumed: {item}")


if __name__ == '__main__':
    queue = multiprocessing.Queue()
    p1 = multiprocessing.Process(target=producer, args=(queue,))
    p2 = multiprocessing.Process(target=consumer, args=(queue,))

    p1.start()
    p2.start()

    p1.join()
    queue.put(None)  # 发送结束信号
    p2.join()