python 多进程的 Process 和 Queue 的使用

Question

from multiprocessing import Process, Queue 解释下这个多进程

Answer

from multiprocessing import Process, Queue 是用于多进程处理的模块。

详细解释

  • 多进程multiprocessing 模块提供了类似于 threading 模块的 API,但它使用的是进程而不是线程。每个进程都有自己的 Python 解释器和内存空间,因此可以避免全局解释器锁(GIL)带来的问题,适用于 CPU 密集型任务。
  • ProcessProcess 类用于创建一个新的进程,并可以指定目标函数和参数。
  • QueueQueue 类用于在不同进程之间传递数据,它是一个线程和进程安全的队列。

要真正体现多进程的优越性,特别是在 CPU 密集型任务中的优势,我们可以通过并行执行多个任务来展示。下面是一个计算斐波那契数列的示例,通过多进程并行计算多个斐波那契数列的值,展示多进程的效率提升。

示例

点击查看示例
from multiprocessing import Process, Queue
import time

def fibonacci(n):
    if n <= 1:
        return n
    else:
        return fibonacci(n-1) + fibonacci(n-2)

def compute_fibonacci(n, queue):
    result = fibonacci(n)
    queue.put((n, result))

if __name__ == "__main__":
    numbers = [35, 36, 37, 38]  # 选择较大的斐波那契数列值
    processes = []
    queue = Queue()

    start_time = time.time()

    # 为每个计算创建一个进程
    for number in numbers:
        p = Process(target=compute_fibonacci, args=(number, queue))
        processes.append(p)
        p.start()

    # 等待所有进程结束
    for p in processes:
        p.join()

    # 输出结果
    while not queue.empty():
        number, result = queue.get()
        print(f"Fibonacci of {number} is {result}")

    end_time = time.time()
    print(f"Total time taken with multiprocessing: {end_time - start_time:.2f} seconds")


优势展示

  • 并行处理:多进程允许将多个计算任务并行运行在不同的 CPU 核心上,这对于计算密集型任务非常有利。
  • 时间效率:在计算密集型任务中,多个进程可以显著减少总的计算时间,因为多个进程可以同时运行,而不是顺序运行。

总结

通过这个示例,你可以看到多进程在处理计算密集型任务时的优势。尽管斐波那契数列的计算量相对较小,但在实际应用中,多进程可以显著提升处理速度,尤其是在有多个 CPU 核心可用的情况下。

posted @ 2024-09-06 15:11  Zenith_Hugh  阅读(238)  评论(0)    收藏  举报