您的位置:首页 > 健康 > 养生 > 江苏seo技术教程_企业网站优化排名方案_河源今日头条新闻最新_网站推广计划书范文

江苏seo技术教程_企业网站优化排名方案_河源今日头条新闻最新_网站推广计划书范文

2025/5/15 17:31:08 来源:https://blog.csdn.net/qq_22497491/article/details/146060876  浏览:    关键词:江苏seo技术教程_企业网站优化排名方案_河源今日头条新闻最新_网站推广计划书范文
江苏seo技术教程_企业网站优化排名方案_河源今日头条新闻最新_网站推广计划书范文

🌟 **Python多进程编程全解:从厨房哲学到代码实战**  

用生活化案例掌握进程创建、通信与实战应用


 

一、计算机原理基础(简版)

 

1. **进程 vs 线程

- **进程**:操作系统分配资源的**独立单元**  

  - 类比:餐厅的独立厨房(拥有全套厨具和食材)  

  - 特点:内存隔离、稳定性高、创建开销大  

- **线程**:进程内的**执行单元**  

  - 类比:厨房里的厨师(共享厨房资源)  

  - 特点:共享内存、高效轻量、需处理资源竞争  

 

 2. Python的GIL(全局解释器锁)

- 本质:同一进程内多个线程无法真正并行执行CPU密集型任务  

- 影响:多线程更适合I/O密集型任务,多进程才是CPU密集型任务的救星  

 


 

二、Python多进程核心组件(厨房管理系统)

 

 1. Process类:创建独立厨房

```python  

from multiprocessing import Process  

import os  

 

def cooking_task(dish):  

    print(f"👨🍳 厨师 {os.getpid()} 正在做 {dish}")  

 

if __name__ == '__main__':  

    # 创建两个进程(厨房)  

    p1 = Process(target=cooking_task, args=("鱼香肉丝",))  

    p2 = Process(target=cooking_task, args=("宫保鸡丁",))  

 

    # 启动进程  

    p1.start()  

    p2.start()  

 

    # 等待进程结束  

    p1.join()  

    p2.join()  

```  

**输出示例**:  

```

👨🍳 厨师 1234 正在做 鱼香肉丝  

👨🍳 厨师 5678 正在做 宫保鸡丁  

```


2. 进程池(Pool):批量管理厨房

 

```python  

from multiprocessing import Pool  

 

def process_image(img_path):  

    # 模拟图片处理耗时操作  

    return f"处理完成:{img_path}"  

 

if __name__ == '__main__':  

    images = ["photo1.jpg", "photo2.jpg", "photo3.jpg"]  

 

    # 创建包含3个进程的池子  

    with Pool(processes=3) as pool:  

        results = pool.map(process_image, images)  

 

    print(results)  

```  

**输出**:  

```

['处理完成:photo1.jpg', '处理完成:photo2.jpg', '处理完成:photo3.jpg']  

```

 


 

三、进程通信:厨房间的传菜系统

 

1. 队列(Queue)

```python  

from multiprocessing import Process, Queue  

 

def producer(q):  

    q.put("新鲜出炉的烤鸭")  

 

def consumer(q):  

    print(f"收到:{q.get()}")  

 

if __name__ == '__main__':  

    q = Queue()  

    p1 = Process(target=producer, args=(q,))  

    p2 = Process(target=consumer, args=(q,))  

    p1.start()  

    p2.start()  

    p1.join()  

    p2.join()  

```  

 

2. 管道(Pipe)

```python  

from multiprocessing import Process, Pipe  

 

def worker(conn):  

    conn.send("主厨,需要更多食材!")  

    print(f"收到指令:{conn.recv()}")  

 

if __name__ == '__main__':  

    parent_conn, child_conn = Pipe()  

    p = Process(target=worker, args=(child_conn,))  

    p.start()  

    print(parent_conn.recv())  

    parent_conn.send("已安排配送")  

    p.join()  

```  


 

 四、实战案例:餐厅后厨模拟

 

 场景需求:  

- 同时处理:凉菜、热菜、汤品  

- 每道菜品制作时间不同  

- 汇总所有菜品完成情况  

 

代码实现:  

```python  

from multiprocessing import Process, Queue  

import time  

import random  

 

def make_dish(name, time_cost, q):  

    print(f"🔥 开始制作 {name}")  

    time.sleep(time_cost)  

    q.put(f"{name} 已完成")  

 

if __name__ == '__main__':  

    menu = [  

        ("凉拌黄瓜", 2),  

        ("红烧肉", 5),  

        ("西湖牛肉羹", 3)  

    ]  

 

    q = Queue()  

    processes = []  

 

    # 启动所有菜品进程  

    for dish, cost in menu:  

        p = Process(target=make_dish, args=(dish, cost, q))  

        processes.append(p)  

        p.start()  

 

    # 等待所有进程完成  

    for p in processes:  

        p.join()  

 

    # 收集结果  

    while not q.empty():  

        print(q.get())  

```  

**输出示例**:  

```

🔥 开始制作 凉拌黄瓜  

🔥 开始制作 红烧肉  

🔥 开始制作 西湖牛肉羹  

凉拌黄瓜 已完成  

西湖牛肉羹 已完成  

红烧肉 已完成  

```

 


 

五、多进程使用场景指南

 

| **场景类型** | **示例** | **推荐方案** |  

|--------------------|------------------------------|--------------------------|  

| **CPU密集型** | 数学计算/图像处理/机器学习 | 多进程(充分利用多核) |  

| **I/O密集型** | 文件操作/网络请求 | 多线程或异步IO |  

| **混合型任务** | 数据处理+结果保存 | 进程池+线程组合 |  

 


 

 六、常见问题与优化策略

 

1. 资源开销大

   - 使用进程池避免频繁创建销毁  

   - 设置合理的进程数量(通常等于CPU核心数)  

 

2. 数据共享困难

   - 优先使用队列/管道传递数据  

   - 复杂场景使用`multiprocessing.Manager`  

 

3. 跨平台兼容性  

   - 在`if __name__ == '__main__':` 中创建进程  

   - 避免在Windows使用`fork`启动方式  

 


 

七、知识拓展:共享内存

 

```python  

from multiprocessing import Process, Value, Array  

 

def increment(n):  

    n.value += 1  

 

def modify_arr(arr):  

    for i in range(len(arr)):  

        arr[i] *= 2  

 

if __name__ == '__main__':  

    num = Value('i', 0) # 共享整型  

    arr = Array('d', [1.0, 2.0]) # 共享数组  

 

    p1 = Process(target=increment, args=(num,))  

    p2 = Process(target=modify_arr, args=(arr,))  

 

    p1.start()  

    p2.start()  

    p1.join()  

    p2.join()  

 

    print(num.value) # 输出:1  

    print(arr[:]) # 输出:[2.0, 4.0]  

```

 


 

🚀 学习建议:

多进程是突破Python性能瓶颈的利器,但就像开餐厅——不是厨房越多越好,合理规划才能效益最大化!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com