【2025010523】pycharm规范代码:多进程调用一个子程序/模块

当然可以。以下是带有详细注释的代码示例,解释了每一行代码的作用:

### 子程序模块 (`submodule.py`)

```python
# submodule.py

def square(number):
    """计算一个数的平方"""
    return number ** 2
```

- `def square(number):`:定义一个名为 `square` 的函数,该函数接受一个参数 `number`。
- `return number ** 2`:返回参数 `number` 的平方值。

### 主程序 (`main.py`)

```python
# main.py

import multiprocessing  # 导入 multiprocessing 模块,用于创建和管理进程
from submodule import square  # 从 submodule 模块中导入 square 函数

def worker(number, result_queue):
    """工作进程的函数"""
    result = square(number)  # 调用 square 函数计算 number 的平方
    result_queue.put(result)  # 将计算结果放入结果队列中

if __name__ == '__main__':
    # 待处理的数据列表
    numbers = [1, 2, 3, 4, 5]  # 定义一个列表,包含需要计算平方的数字
    
    # 创建一个队列用于存储结果
    result_queue = multiprocessing.Queue()  # 创建一个进程安全的队列
    
    # 创建进程列表
    processes = []  # 初始化一个空列表,用于存储进程对象
    
    # 创建并启动进程
    for number in numbers:
        p = multiprocessing.Process(target=worker, args=(number, result_queue))  # 创建一个进程对象
        p.start()  # 启动进程
        processes.append(p)  # 将进程对象添加到列表中
    
    # 等待所有进程完成
    for p in processes:
        p.join()  # 等待每个进程完成执行
    
    # 获取结果
    results = []  # 初始化一个空列表,用于存储计算结果
    while not result_queue.empty():
        results.append(result_queue.get())  # 从队列中取出结果并添加到列表中
    
    # 输出结果
    print("Results:", results)  # 打印最终的计算结果
```

### 代码解释

- **导入模块**:
  - `import multiprocessing`:导入 `multiprocessing` 模块,用于创建和管理多进程。
  - `from submodule import square`:从 `submodule.py` 文件中导入 `square` 函数,以便在主程序中使用.

- **定义工作函数**:
  - `def worker(number, result_queue):`:定义一个名为 `worker` 的函数,该函数接受两个参数:`number`(需要计算平方的数字)和 `result_queue`(用于存储结果的队列).
  - `result = square(number)`:调用 `square` 函数计算 `number` 的平方,并将结果赋值给变量 `result`.
  - `result_queue.put(result)`:将计算得到的 `result` 放入 `result_queue` 中,以便后续获取结果.

- **主程序入口**:
  - `if __name__ == '__main__':`:确保代码在主进程中执行,防止在子进程中意外执行.
  - `numbers = [1, 2, 3, 4, 5]`:定义一个包含待处理数字的列表.
  - `result_queue = multiprocessing.Queue()`:创建一个进程安全的队列,用于存储各个进程的计算结果.
  - `processes = []`:初始化一个空列表,用于存储创建的进程对象.

- **创建并启动进程**:
  - `for number in numbers:`:遍历 `numbers` 列表中的每个数字.
  - `p = multiprocessing.Process(target=worker, args=(number, result_queue))`:创建一个进程对象,指定 `worker` 函数为执行目标,并传递相应的参数(`number` 和 `result_queue`).
  - `p.start()`:启动进程,使其开始执行 `worker` 函数.
  - `processes.append(p)`:将创建的进程对象添加到 `processes` 列表中,以便后续管理.

- **等待进程完成**:
  - `for p in processes:`:遍历 `processes` 列表中的每个进程对象.
  - `p.join()`:调用 `join()` 方法等待每个进程完成执行,确保主程序在所有子进程结束后再继续执行.

- **获取并输出结果**:
  - `results = []`:初始化一个空列表,用于存储从队列中获取的计算结果.
  - `while not result_queue.empty():`:当队列不为空时,循环从队列中获取结果.
  - `results.append(result_queue.get())`:从队列中取出一个结果,并将其添加到 `results` 列表中.
  - `print("Results:", results)`:打印最终的计算结果列表,展示每个数字的平方值.

通过这些注释,你可以更好地理解代码的结构和每一行代码的作用,从而更好地掌握多进程编程的技巧.
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值