首页 > 编程知识 正文

python有什么用(python并行计算代码_python怎么实现并行计算_python concurrent.futures 实现并行计算)

时间:2023-05-04 12:05:21 阅读:121719 作者:4239

python无法在线程上实现真正的并行计算,因为全局解释器锁定了GIL。 这个论断我们不展开,但有一个概念。 IO密集型vs .计算密集型。

IO集中式:读取文件,频繁读取web套接字。

计算量大:大量消耗CPU的数学和逻辑运算,也就是这里所说的并行计算。

在concurrent.futures模块中,您可以利用multiprocessing实现真正的并行计算。

主要原理是,由于concurrent.futures将多个python解释器作为子进程并行运行,因此python程序可以利用多核CPU来提高运行速度。

由于子进程与主解释器分离,因此全局解释器的锁定也是相互独立的。 每个子进程完全可以使用一个CPU核心。

1 .不采用并行

importglobimportosimportcv2forimg _ nameinglob.glob (' *.jpg ' ) :

img=cv2.imread(img_name

img=cv2.resize(img,(600,600 ) )

2 .多进程

importglobimportosimportcv 2导入concurrent.futuresdefload _ and _ resize (img _ name ) :

img=cv2.imread(img_name

img=cv2.resize(img,(600,600 ) ) creatapoolofprocesses.by default,oneiscreatedforeachcpuinyourmachine。

with concurrent.futures.processpoolexecutor () as executor:

img_name=glob.glob((*.jpg ) ) ) )。

执行程序. map (load _ and _ resize,img_name ) )。

总是大幅加速吗?

如果您有一个由谨慎老师处理的数据列表,并且希望对每个数据点执行类似的计算,则使用Python并行池是一个不错的解决方案。

但是,那并不一定完美。 并行池中处理的数据不会按可预测的顺序处理。 如果要处理的结果按特定顺序排列,则此方法可能不适合。

你处理的数据必须是Python知道如何“pickle”的类型。 幸运的是,这些类型很常见。 以下是Python官方文档:

None,True,False

整数、浮点数、复数

字符串、字节、字节数组

只包含可选择对象的元组、列表、集合和词典

在模块的顶层定义的函数。 使用def而不是lambda

在模块的顶层定义的内置函数

在模块的顶层定义的类

调用这些类的实例,__dict__或__getstate __ ()的结果是可选的

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。