- 本书赞誉
- 前言
- 目标读者
- 不适合阅读本书的读者
- 本书结构
- 什么是数据处理
- 遇到困难怎么办
- 排版约定
- 使用代码示例
- 致谢
- 第 1 章 Python 简介
- 第 2 章 Python 基础
- 第 3 章 供机器读取的数据
- 第 4 章 处理 Excel 文件
- 第 5 章 处理 PDF 文件 以及用 Python 解决问题
- 第 6 章 数据获取与存储
- 第 7 章 数据清洗:研究、匹配与格式化
- 第 8 章 数据清洗:标准化和脚本化
- 第 9 章 数据探索和分析
- 第 10 章 展示数据
- 第 11 章 网页抓取:获取并存储网络数据
- 第 12 章 高级网页抓取:屏幕抓取器与爬虫
- 第 13 章 应用编程接口
- 第 14 章 自动化和规模化
- 第 15 章 结论
- 附录 A 编程语言对比
- 附录 B 初学者的 Python 学习资源
- 附录 C 学习命令行
- 附录 D 高级 Python 设置
- 附录 E Python 陷阱
- 附录 F IPython 指南
- 附录 G 使用亚马逊网络服务
- 关于作者
- 关于封面
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
E.2 可怕的 GIL
GIL(Global Interpreter Lock,全局解释器锁)是 Python 解释器用于一次只用一个线程执行代码的一种机制。这意味着当你运行 Python 脚本时,即使上在一台多进程机器上,你的代码也会线性执行。这个设计最初的目的是让 Python 可以通过 C 代码快速地运行,但是仍然是线程安全的。
GIL 给 Python 带来的限制意味着在标准解释器中,Python 从来不会真正地并行化。这对于一些高 I/O 的应用程序,或者严重依赖多重处理的应用程序来说,是一个劣势。1 有些 Python 库通过使用多重处理或异步服务 2,规避了这些问题,但是它们没有改变 GIL 仍然存在的事实。
1关于 GIL 可视化的更多信息,查看 David Beazley 的“一个可缩放、可交互的 Python 线程可视化”(http://www.dabeaz.com/GIL/gilvis/)。
2关于这些包的功能,查看 Jeff Knupp 关于如何减轻 GIL 问题影响的文章(https://www.jeffknupp.com/blog/2013/06/30/pythons-hardest-problem-revisited/)。
即便如此,有很多 Python 核心开发者意识到由 GIL 带来的问题,还有它的好处。在 GIL 成为开发痛点的情况下,通常有不错的应对方案,而且根据你的需要,还有用 C 以外的其他语言编写的其他解释器可用。如果你发现 GIL 成为了代码中的一个问题,很可能你可以重新架构你的代码,或利用一个不同的代码基(例如 Node.js)来满足你的需求。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论