温馨提示:阅读本文需要了解一些python基础语法,例如列表生成式
系统:Mac Monterey12.4
环境:python 3.8.10
为了演示,我们创建一个简单的列表,然后需要对列表中的每一个元素计算2次方,得到一个新的列表,定义好的列表和函数如下所示:
from concurrent.futures import ProcessPoolExecutor
import time
import pandas as pd
data = [2,4,6,8]
# 计算二次方
def jisuan(x):
# 模拟耗时任务
time.sleep(1)
return x**2start_time = time.time()
result = []
result_list = [jisuan(i) for i in data]
print(result_list)
print("单线程耗时:" + str(time.time() - start_time))
控制台输出:
[4, 16, 36, 64]
单线程耗时:4.009780168533325start_time = time.time()
result_Process = []
# 进程池,最多使用3个核心并行计算
with ProcessPoolExecutor(max_workers=3) as executor:
try:
# map会为 data 的每个元素启动一个进程,以并发方式来执行 jisuan 函数,
# 并收集进程计算的结果
result = executor.map(jisuan, data)
for i in result:
result_Process.append(i)
except Exception as e:
print(e)
end_time = time.time()
print(result_Process)
print("多进程耗时:" + str(end_time - start_time))
控制台输出:
[4, 16, 36, 64]
多进程耗时:2.047276258468628可以看到多进程版本比单线程版本所耗时间减少了一半。
在上面的计算中,data元素之间相互独立,如果存在前后依赖关系(例如计算该元素的结果,需要先算出前面一个元素的结果),则不能使用并行加速了。
若以上内容对你有帮助,欢迎点赞收藏[爱慕]
| 留言与评论(共有 0 条评论) “” |