优化代码def parallel_cal(input_packages, cpu_count): """ 并行计算函数 :param input_packages: 输入函数参数 :param cpu_count: CPU数量 :return: """ number = 0 with concurrent.futures.ProcessPoolExecutor(max_workers=cpu_count) as executor: res = executor.map(batt_cal, input_packages) for car in zip(input_packages): print('Process %s , is No. %d' % (car, number)) number += 1 return
时间: 2023-12-21 08:03:29 浏览: 68
这段代码的问题在于,您使用了`zip`函数将`input_packages`和`executor.map(batt_cal, input_packages)`打包在一起,但`zip`函数只会返回一个元组,包含每个迭代器中相同位置的元素。因此,您的`for`循环只会遍历`input_packages`一次,而不是遍历每个并行计算的结果。因此,您需要修改代码以正确遍历每个并行计算的结果。以下是修改后的代码:
```python
import concurrent.futures
def parallel_cal(input_packages, cpu_count):
"""
并行计算函数
:param input_packages: 输入函数参数
:param cpu_count: CPU数量
:return:
"""
with concurrent.futures.ProcessPoolExecutor(max_workers=cpu_count) as executor:
futures = [executor.submit(batt_cal, package) for package in input_packages]
for number, future in enumerate(concurrent.futures.as_completed(futures)):
res = future.result()
print('Process %d is completed with result %s' % (number, res))
```
在这个修改后的代码中,我们使用`concurrent.futures.as_completed`函数来迭代已完成的并行计算,并使用`future.result()`方法获取结果。同时,我们也将`enumerate`函数用于`as_completed`迭代器,以便获取每个计算的编号。
阅读全文