【Python】【并行计算】Python 多核并行计算

【Python】【并行计算】Python 多核并行计算,第1张

概述原文转自:https://abcdabcd987.com/python-multiprocessing/Python多核并行计算Nov2,2016 • python以前写点小程序其实根本不在乎并行,单核跑跑也没什么问题,而且我的电脑也只有双核四个超线程(下面就统称核

原文转自:https://abcdabcd987.com/python-multiprocessing/


以前写点小程序其实根本不在乎并行,单核跑跑也没什么问题,而且我的电脑也只有双核四个超线程(下面就统称好了),觉得去折腾并行没啥意义(除非在做IO密集型任务)。然后自从用上了32核128GB内存,看到  里面一堆空载的核,很自然地就会想这个并行必须去折腾一下。后面发现,其实 Python 的并行真的非常简单。

 vs 

Python 自带的库又全又好用,这是我特别喜欢 Python 的原因之一。Python 里面有 和  这两个用来实现并行的库。用线程应该是很自然的想法,毕竟(直觉上)开销小,还有共享内存的福利,而且在其他语言里面线程用的确实是非常频繁。然而,我可以很负责任的说,如果你用的是 cpython 实现,那么用了  就等同于和并行计算说再见了(实际上,甚至会比单线程更慢),除非这是个IO密集型的任务。

 指的是  提供的 Python 实现。是的,Python 是一门语言,它有各种不同的实现,比如 , ,  等等……我们用的最多的就是 CPython,它几乎就和 Python 画上了等号。

CPython 的实现中,使用了  即全局锁,来简化解释器的实现,使得解释器每次只执行一个线程中的字节码。也就是说,除非是在等待IO *** 作,否则 cpython 的多线程就是彻底的谎言!

有关 GIL 下面两个资料写的挺好的:

因为 GIL 的缘故  不能用,那么我们就好好研究研究 。(当然,如果你说你不用 cpython,没有 GIL 的问题,那也是极佳的。)

首先介绍一个简单粗暴,非常实用的工具,就是 。如果你的任务能用  来解决,大家可能都知道,这样的形式天生就是最容易并行的,那么在 Python 里面并行计算这个任务真是再简单不过了。举个例子,把每个数都平方:

<span >def <span >f<span >(<span >x<span >):
<span >return <span >x <span >* <span >x

<span >cores <span >= <span >multiprocessing<span >.<span >cpu_count<span >()
<span >pool <span >= <span >multiprocessing<span >.<span >Pool<span >(<span >processes<span >=<span >cores<span >)
<span >xs <span >= <span >range<span >(<span >5<span >)

<span ># method 1: map
<span >print <span >pool<span >.<span >map<span >(<span >f<span >, <span >xs<span >) <span ># prints [0,1,4,9,16]

<span ># method 2: imap
<span >for <span >y <span >in <span >pool<span >.<span >imap<span >(<span >f<span >, <span >xs<span >):
<span >print <span >y <span ># 0,16,respectively

<span ># method 3: imap_unordered
<span >for <span >y <span >in <span >pool<span >.<span >imap_unordered<span >(<span >f<span >, <span >xs<span >):
<span >print<span >(<span >y<span >) <span ># may be in any order

总结

以上是内存溢出为你收集整理的【Python】【并行计算】Python 多核并行计算全部内容,希望文章能够帮你解决【Python】【并行计算】Python 多核并行计算所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1209166.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)