参考:https://stackoverflow.com/questions/20939299/does-python-support-multithreading-can-it-speed-up-execution-time

GIL 不会阻止线程。 GIL 所做的只是确保一次只有一个线程在执行 Python 代码; 控制仍然在线程之间切换。

GIL 阻止的是使用多个 CPU 内核或单独的 CPU 来并行运行线程。

这仅适用于 Python 代码。 C 扩展可以并且确实发布了 GIL,以允许 C 代码的多个线程和一个 Python 线程跨多个内核运行。 这扩展到由内核控制的 I/O,例如用于套接字读写的 select() 调用,使 Python 在多线程多核设置中合理有效地处理网络事件。

许多服务器部署所做的是运行多个 Python 进程,让操作系统处理进程之间的调度,以最大限度地利用您的 CPU 核心。 如果适合您的用例,您还可以使用多处理库来处理来自一个代码库和父进程的多个进程的并行处理。

请注意,GIL 仅适用于 CPython 实现; Jython 和 IronPython 使用不同的线程实现(分别是本机 Java VM 和 .NET 公共运行时线程)。

直接解决您的更新:任何试图通过并行执行获得速度提升的任务,使用纯 Python 代码,都不会看到加速,因为线程 Python 代码被锁定为一次执行一个线程。 但是,如果您混合使用 C 扩展和 I/O(例如 PIL 或 numpy 操作),则任何 C 代码都可以与一个活动的 Python 线程并行运行。

Python 线程非常适合创建响应式 GUI,或处理多个短 Web 请求,其中 I/O 比 Python 代码更成为瓶颈。 它不适合并行化计算密集型 Python 代码,坚持使用多处理模块来完成此类任务或委托给专用的外部库。

Python 标准库确实有一个多线程库——而且它可以工作。
参考实现(来自 Welcome to Python.org 的 CPython)实现了一个 GIL,以便它在线程之间可靠地引用跟踪。

GIL 意味着来自同一个 Python 进程的两个线程不能同时执行 Python 代码; GIL 在开始执行单个 Python 字节码时获取,并在字节码执行完成时释放。
GIL 不会阻止 Python 程序中的 C 扩展成为多线程——如果一个正在等待 I/O 完成,它也不会阻止两个 Python 线程一起运行。
Python 的其他实现(著名的 JYthon 和 PyPy)不使用 GIL,并且在这些实现中纯 Python 线程是同时执行的; 线程在不同的 CPU 内核上执行。

python多线程的问题的更多相关文章

  1. python多线程学习记录

    1.多线程的创建 import threading t = t.theading.Thread(target, args--) t.SetDeamon(True)//设置为守护进程 t.start() ...

  2. python多线程编程

    Python多线程编程中常用方法: 1.join()方法:如果一个线程或者在函数执行的过程中调用另一个线程,并且希望待其完成操作后才能执行,那么在调用线程的时就可以使用被调线程的join方法join( ...

  3. Python 多线程教程:并发与并行

    转载于: https://my.oschina.net/leejun2005/blog/398826 在批评Python的讨论中,常常说起Python多线程是多么的难用.还有人对 global int ...

  4. python多线程

    python多线程有两种用法,一种是在函数中使用,一种是放在类中使用 1.在函数中使用 定义空的线程列表 threads=[] 创建线程 t=threading.Thread(target=函数名,a ...

  5. python 多线程就这么简单(转)

    多线程和多进程是什么自行google补脑 对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂.所以,这里力图用简单的例子,让你对多线程有个初步的认识. 单线程 在好些年前的 ...

  6. python 多线程就这么简单(续)

    之前讲了多线程的一篇博客,感觉讲的意犹未尽,其实,多线程非常有意思.因为我们在使用电脑的过程中无时无刻都在多进程和多线程.我们可以接着之前的例子继续讲.请先看我的上一篇博客. python 多线程就这 ...

  7. python多线程监控指定目录

    import win32file import tempfile import threading import win32con import os dirs=["C:\\WINDOWS\ ...

  8. python多线程ssh爆破

    python多线程ssh爆破 Python 0x01.About 爆弱口令时候写的一个python小脚本,主要功能是实现使用字典多线程爆破ssh,支持ip表导入,字典数据导入. 主要使用到的是pyth ...

  9. 【python,threading】python多线程

    使用多线程的方式 1.  函数式:使用threading模块threading.Thread(e.g target name parameters) import time,threading def ...

  10. <转>Python 多线程的单cpu与cpu上的多线程的区别

    你对Python 多线程有所了解的话.那么你对python 多线程在单cpu意义上的多线程与多cpu上的多线程有着本质的区别,如果你对Python 多线程的相关知识想有更多的了解,你就可以浏览我们的文 ...

随机推荐

  1. 基于Ubuntu搭建OpenGL开发环境

    1. 引言 笔者这里基于Ubuntu 20.04.3 LTS系统,搭建OpenGL开发环境,主要使用的库有GLFW和GLAD GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最 ...

  2. 死磕rmi之 RegistryImpl

    Registry初始化 可以把注册中心理解为特殊的远程对象,这个对象就像一个容器一样,存储其他远程对象. 可以本地直接调用四大方法,也可通过调用远程对象的方式调用. 查看一下类继承关系 可参照http ...

  3. 一台电脑连接多个不同IP段

    1.首先让电脑能联网,则在ipv4里面设置好能上网的ip地址,dns则为路由器ip 备用dns8.8.8.8 2.点击高级依次添加其他内网ip段 例如192.168.0.66 ----------19 ...

  4. plesk 关闭维护模式

    最近遇到访问plesk时出现maintanase mode模式,于是网上搜了答案都是老外的,且没有明确怎么解决,但可能造成这一问题的原因也很多,我这个是这么解决的,和大家分享下,希望可以起到一个思路引 ...

  5. 加载properties文件

    import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java ...

  6. 记录 mysql修改密码报错问题 (ERROR 1054 (42S22): Unknown column 'password' in 'field list')

    报错如图: 查了相关文档 MySQL官网手册表示MySQL5.7版本后,password这个字段被改成 authentication_string, 命令修改如下: update user set a ...

  7. spring-boot logback 日志

    一.引入依赖 二.配置日志文件 三.完事啦!

  8. 获取Java运行环境信息

    设备相关信息 获取设备名称 import java.net.InetAddress; import java.net.UnknownHostException; try { InetAddress l ...

  9. jmeterGUI&非GUI模式之如何减负性能调优

    jmeter之如何减负-实现稳定超高并发测试(性能调优)在测试过程中,初学者使用工具不当,添加众多监控组件,非常想看到实时报告,跑不了一会,jmeter就卡死甚至内存耗尽,只得重启,之前的统计报告没了 ...

  10. 记录将Base64字符串转化为图片遇到的问题

    今天通过与别人写的api交互,获取到了一个原为图片的base64字符串,在网上找到了相互转换的方法,但是在转化时,报出了"输入不是有效的 Base64 字符串,因为它包含非 base 64 ...