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

有关python GIL的问题

张逸清
2023-03-14
问题内容

python GIL的存在是否意味着在python多线程中 相同的 操作与在单线程中重复操作有什么不同?

例如,如果我需要上传两个文件,那么在两个线程中执行而不是一个接一个地上传它们有什么好处?

我以两种方式尝试了一次大型数学运算。但是他们似乎花费几乎相同的时间才能完成。

这似乎对我来说还不清楚。有人可以帮我吗?谢谢。


问题答案:

Python的线程在说唱方面要比应有的差一些。在三种(实际上是2.5种)案例中,它们实际上为您带来了好处:

  • 如果非Python代码(例如C库,内核等)正在运行,则其他Python线程可以继续执行。这是纯Python代码,无法一次在两个线程中运行。因此,如果您正在执行磁盘或网络I / O,则线程确实可以为您带来收益,因为大部分时间都花在了Python本身之外。

  • GIL实际上不是 Python的 一部分,它是 CPython 的实现细节(核心Python开发人员从事的“参考”实现,通常只要在Linux机器上运行“ python”之类的东西就可以得到)。

Jython,IronPython和其他任何重新实现的Python通常都 没有 GIL,并且多个纯Python线程 可以 同时执行。

  • 0.5的情况:即使您完全是纯Python的用户,也几乎没有从线程中获得性能收益,但就开发人员的时间和解决线程的难度而言,某些问题确实很方便。当然,这也部分取决于开发人员。


 类似资料:
  • 我有一个关于Firestore数据库中读/写的问题。情况是: 我有一个集合“城市”(例如20个城市),它有一个子集合“餐厅”(例如500家餐厅): 现在我的问题是:当我想得到一个城市中的所有餐厅时,FiRecovery会支付多少次读取费用?500? 当我想添加一家餐厅时:是否只需要写一封信就可以将此文档添加到子集合中?

  • 问题内容: 我想问一下调度,是否有用于调度的MySQL命令。例如,我想将数据插入数据库。我可以编写一条sql语句将其保存一段时间,还是可以在预定的时间插入此数据,例如明天8:00 am 我知道这些可以通过编程来完成,但是我想在SQL命令中完成,是否可以这样做?如果没有,有什么建议吗? 问题答案: 计划后台作业不是SQL命令集的一部分。因此,取决于每个数据库供应商提供自己的扩展。在Oracle中,它

  • 问题内容: 我是一名新的golang开发人员,我想知道为什么需要在项目的根目录设置环境变量。 如果我同时从事多个项目,则每次都需要重新设置环境变量以指向不同的位置。 在我的设置中,我已设置为。这是我所有golang项目的通用目录。 只是为了澄清:将项目数据放入 如果(据我所知)全部用于安装第三方库,那么为我所有的项目提供一个目录并不安全,因此所有必需的第三方库都安装在同一lib目录中,并且每当我在

  • 问题内容: 我有一些旧的(损坏的)代码,使用* =进行了联接 这是左外部连接还是右外部连接?(我的错误消息表明它是其中之一) 问题答案: 而是利用

  • 但是,当我使用命令行中的ndk-build命令编译它时,会出现以下错误: Android NDK:APP_PLATFORM未设置。默认为最小支持版本Android-16。[arm64-v8a]编译:com_celik_abdullah_imageprocessingpart_processors_NativeImageProcessor<=com_celik_Abdullah_ImageProce

  • 我遇到了一个家庭作业的麻烦,创建一个调用另一个类的方法的类。给我们下一课: 然后给出以下提示: 实现一个类Portfolio。这个类有两个对象,checking和savings,类型为BankAccount。实现四种方法: 公用无效存款(双倍金额,字符串帐户) 公开无效提取(双倍金额,字符串帐户) 公有作废转账(双倍金额,字符串账户) 公共双getBalance(字符串帐户) 这里的帐户字符串是“