当前位置: 首页 > 面试题库 >

线程如何在Python中工作,以及特定于Python线程的常见陷阱是什么?

钦德佑
2023-03-14
问题内容

我一直在努力地研究线程在Python中的工作方式,很难找到关于它们如何运行的良好信息。我可能只是缺少链接之类的东西,但是官方文档似乎对该主题并不十分详尽,而且我也找不到很好的文章。

据我所知,一次只能运行一个线程,活动线程每10条指令左右切换一次?

哪里有很好的解释,或者您可以提供一个解释?知道在Python中使用线程时遇到的常见问题也将非常高兴。


问题答案:

是的,由于全局解释器锁定(GIL),一次只能运行一个线程。以下是一些有关此方面的见解的链接:

  • http://www.artima.com/weblogs/viewpost.jsp?thread=214235
  • http://smoothspan.wordpress.com/2007/09/14/guido-is-right-to-leave-the-gil-in-python-not-for-multicore-but-for-utility-computing/

在最后一个链接中有一个有趣的报价:

让我解释一下这一切的含义。线程在同一虚拟机内运行,因此在同一物理机上运行。进程可以在同一台物理计算机上运行,​​也可以在另一台物理计算机上运行。如果您围绕线程构建应用程序,则您无济于事可访问多台计算机。因此,您可以扩展到一台计算机上的多个内核(随着时间的推移,内核数量会增加很多),但是要真正达到Web规模,则无论如何都需要解决多计算机问题。

如果要使用多核,则pyprocessing定义基于进程的API来进行真正的并行化。该PEP还包括了一些有趣的基准。



 类似资料:
  • 通常,Python 旨在成为一门简洁一致的语言,避免发生意外。然而,有些情况可能会给新手们造成困惑。 在这些情况中,有一些虽是有意为之,但还是有潜在风险。还有一些则可以说是语言设计缺陷了。总之,下面列出的这些情况都是些乍一看很不好理解的行为,不过一旦您了解了这些奇怪行为背后的机理,也就基本上能理解了。 可变默认参数 似乎每个 Python 新手都会感到惊讶的一点是 Python 在函数定义中对待可

  • 不要发表无目的的文章 在线项目中一个常见的陷阱是认为你需要回复所有的东西。你不必如此。首先,一般会有太多你无法同时跟踪的线索,至少是经过它开始的几个月后。其次,即使你已经决定参与,人们说的大多数话都无需回应。开发论坛都会不同程度的由下列三类信息占据: 提出重要事物的信息 提出对他人曾经说过的话表示支持或反对的信息 总结信息 上述信息并不是必定需要一个回应,特别是当你根据到目前为止的线索,很确定其他

  • 问题内容: 我试图了解Python中的线程。我看过文档和示例,但坦率地说,许多示例过于复杂,我难以理解它们。 你如何清楚地显示为多线程而划分的任务? 问题答案: 我将在下面进行总结-最终仅是几行代码: 这是以下内容的多线程版本: 描述 Map是一个很棒的小功能,是轻松将并行性注入Python代码的关键。对于那些不熟悉的人来说,地图是从Lisp等功能语言中提炼出来的。它是将另一个功能映射到序列上的功

  • 问题内容: 我确定标准库中有类似的东西,但似乎我错了。 我有一堆平行的网址。我想要类似内建函数的东西,除了工作是由一堆线程并行完成的。 有一个好的模块可以做到这一点吗? 问题答案: 有人建议我为此使用包装。我尝试了,它似乎正在工作。 http://pypi.python.org/pypi/futures 这是一个例子:

  • 翻译自:https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/ 警告: 请阅读下面所有的内容!是所有的! 不管是新手还是老用户,都可能会掉到一个陷阱中去。下面我们会列出一些我们经常看到,和 经常需要解释如何解决的问题。在 Freenode 的 Nginx IRC 频道中,我们频繁的看到这些问题出现。

  • 问题内容: 经常出现在Python模块中。即使阅读了Python的文档,我也不明白它的用途以及使用时间/方式。 有人可以举例说明吗? 关于我收到的基本用法的一些答案似乎是正确的。 但是,我需要了解有关工作原理的另一件事: 对我来说,最令人困惑的概念是当前的python版本如何包含未来版本的功能,以及如何使用当前版本的Python成功地编译使用未来版本的功能的程序。 我猜想当前版本包含了将来的潜在功