IWA
2025-08-25
点 赞
1
热 度
2
评 论
0

Python 多进程编程教程

1. 多进程概述

多进程是一种并发编程方式,允许程序同时运行多个进程,每个进程拥有独立的内存空间和系统资源。Python 通过 multiprocessing 模块提供了对多进程编程的支持,适用于 CPU 密集型任务。

2. 创建进程

2.1 使用 Process

import multiprocessing
import os

def worker():
    print(f"子进程 ID: {os.getpid()}")

if __name__ == "__main__":
    p = multiprocessing.Process(target=worker)
    p.start()
    p.join()
    print(f"主进程 ID: {os.getpid()}")

2.2 带参数的进程

def worker(name):
    print(f"{name} 在子进程中运行")

if __name__ == "__main__":
    p = multiprocessing.Process(target=worker, args=("进程1",))
    p.start()
    p.join()

3. 进程池

使用 Pool 可以管理多个进程,适用于批量任务处理。

def square(x):
    return x * x

if __name__ == "__main__":
    with multiprocessing.Pool(processes=4) as pool:
        results = pool.map(square, [1, 2, 3, 4, 5])
        print(results)  # 输出: [1, 4, 9, 16, 25]

4. 进程间通信

4.1 使用队列(Queue)

def producer(q):
    q.put("数据")

def consumer(q):
    data = q.get()
    print(f"接收到: {data}")

if __name__ == "__main__":
    q = multiprocessing.Queue()
    p1 = multiprocessing.Process(target=producer, args=(q,))
    p2 = multiprocessing.Process(target=consumer, args=(q,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

4.2 使用管道(Pipe)

def sender(conn):
    conn.send("消息")
    conn.close()

def receiver(conn):
    msg = conn.recv()
    print(f"收到: {msg}")
    conn.close()

if __name__ == "__main__":
    parent_conn, child_conn = multiprocessing.Pipe()
    p1 = multiprocessing.Process(target=sender, args=(child_conn,))
    p2 = multiprocessing.Process(target=receiver, args=(parent_conn,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

5. 进程同步

5.1 使用锁(Lock)

def increment(lock, counter):
    with lock:
        counter.value += 1

if __name__ == "__main__":
    lock = multiprocessing.Lock()
    counter = multiprocessing.Value('i', 0)
    processes = []

    for _ in range(10):
        p = multiprocessing.Process(target=increment, args=(lock, counter))
        processes.append(p)
        p.start()

    for p in processes:
        p.join()

    print(f"最终计数: {counter.value}")

6. 共享内存

使用 ValueArray 实现进程间共享数据。

def update_shared_value(shared_val):
    shared_val.value += 1

if __name__ == "__main__":
    shared_val = multiprocessing.Value('i', 0)
    processes = []

    for _ in range(5):
        p = multiprocessing.Process(target=update_shared_value, args=(shared_val,))
        processes.append(p)
        p.start()

    for p in processes:
        p.join()

    print(f"共享值结果: {shared_val.value}")

7. 注意事项

  1. 在 Windows 系统中,多进程代码必须放在 if __name__ == "__main__": 条件下执行。

  2. 多进程适用于 CPU 密集型任务,但对于 I/O 密集型任务,多线程可能更合适。

  3. 进程间通信会带来额外开销,需谨慎设计。

总结:通过掌握这些多进程编程技术,您可以充分利用多核 CPU 的计算能力,提高程序的执行效率。


用键盘敲击出的不只是字符,更是一段段生活的剪影、一个个心底的梦想。希望我的文字能像一束光,在您阅读的瞬间,照亮某个角落,带来一丝温暖与共鸣。

IWA

estp 企业家

具有版权性

请您在转载、复制时注明本文 作者、链接及内容来源信息。 若涉及转载第三方内容,还需一同注明。

具有时效性

文章目录

IWA的艺术编程,为您导航全站动态

19 文章数
9 分类数
9 评论数
23标签数
最近评论
M丶Rock

M丶Rock


😂

M丶Rock

M丶Rock


感慨了

M丶Rock

M丶Rock


厉害了

M丶Rock

M丶Rock


6666666666666666666

M丶Rock

M丶Rock


6666666666666666666

访问统计