码迷,mamicode.com
首页 > 编程语言 > 详细

python面试题之多线程好吗?列举一些让Python代码以并行方式运行的方法

时间:2019-08-31 19:11:25      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:targe   多个   oba   www   部分   python   OLE   开启   为什么   

答案

Python并不支持真正意义上的多线程。Python中提供了多线程包,但是如果你想通过多线程提高代码的速度,使用多线程包并不是个好主意。Python中有一个被称为Global Interpreter Lock(GIL)的东西,它会确保任何时候你的多个线程中,只有一个被执行。线程的执行速度非常之快,会让你误以为线程是并行执行的,但是实际上都是轮流执行。经过GIL这一道关卡处理,会增加执行的开销。这意味着,如果你想提高代码的运行速度,使用threading包并不是一个很好的方法。

不过还是有很多理由促使我们使用threading包的。如果你想同时执行一些任务,而且不考虑效率问题,那么使用这个包是完全没问题的,而且也很方便。但是大部分情况下,并不是这么一回事,你会希望把多线程的部分外包给操作系统完成(通过开启多个进程),或者是某些调用你的Python代码的外部程序(例如Spark或Hadoop),又或者是你的Python代码调用的其他代码(例如,你可以在Python中调用C函数,用于处理开销较大的多线程工作)。

为什么提这个问题

因为GIL就是个混账东西(A-hole)。很多人花费大量的时间,试图寻找自己多线程代码中的瓶颈,直到他们明白GIL的存在。

本文首发于Python黑洞网,博客园同步跟新

 

python面试题之多线程好吗?列举一些让Python代码以并行方式运行的方法

标签:targe   多个   oba   www   部分   python   OLE   开启   为什么   

原文地址:https://www.cnblogs.com/pythonzhichan/p/11440039.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!