首页 > 编程语言 >python全局锁总结

python全局锁总结

时间:2023-11-23 13:23:09浏览次数:43  
标签:总结 执行 python Python 线程 100 全局 GIL CPU

一、用Python写个死循环,把N核CPU的核心全部跑满

import threading, multiprocessing

def loop():
    x = 0
    while True:
        x = x ^ 1

for i in range(multiprocessing.cpu_count()):
    t = threading.Thread(target=loop)
    t.start()

启动与CPU核心数量相同的N个线程,在4核CPU上可以监控到CPU占用率仅有102%,也就是仅使用了一核。

但是用C、C++或Java来改写相同的死循环,直接可以把全部核心跑满,4核就跑到400%,8核就跑到800%,为什么Python不行呢?

因为Python的线程虽然是真正的线程,但解释器执行代码时,有一个GIL锁:Global Interpreter Lock,任何Python线程执行前,必须先获得GIL锁,然后,每执行100条字节码,解释器就自动释放GIL锁,让别的线程有机会执行。这个GIL全局锁实际上把所有线程的执行代码都给上了锁,所以,多线程在Python中只能交替执行,即使100个线程跑在100核CPU上,也只能用到1个核。

二、总结

Python虽然不能利用多线程实现多核任务,但可以通过多进程实现多核任务。多个Python进程有各自独立的GIL锁,互不影响。

翻译

搜索

复制

<iframe></iframe>

标签:总结,执行,python,Python,线程,100,全局,GIL,CPU
From: https://www.cnblogs.com/szmcn/p/17851337.html

相关文章

  • Python 使用SQLAlchemy数据库模块
    SQLAlchemy是用Python编程语言开发的一个开源项目,它提供了SQL工具包和ORM对象关系映射工具,使用MIT许可证发行,SQLAlchemy提供高效和高性能的数据库访问,实现了完整的企业级持久模型。ORM(对象关系映射)是一种编程模式,用于将对象与关系型数据库中的表和记录进行映射,从而实现通过面向......
  • 【Python&GIS】基于Python面矢量转换线矢量
    ​        今天有些不一样,发这篇文章并不是项目需要。单纯的想到有这个功能没使用Python实现,所以就去研究了一下,第一时间就和大家分享。如何使用Python的osgeo库实现面矢量数据与线矢量数据的互相转换。一、导入所需库importosfromosgeoimportogr二、面转线......
  • python脚本把日志转成excel
    之前go写的,转成了python版本,日志是json格式的,按行读取{"aid":"1111","cid":"2222","callback_url":"http:\/\/ad.toutiao.com\/track\/activate\/?callback=B.eDCQxxxxxGCB&os=0&muid=","advertiser_id"......
  • CodeWhisperer 体验总结
    CodeWhisperer体验总结|CodeWhisperer是一款亚马逊新推出的通用代码生成器可以实时进行代码数据的提供还可以定义安全问题CodeWhisperer对个人用户是免费使用企业用户需要订阅使用亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、......
  • oracle 日期时间函数使用总结
    常用日期数据格式获取年的最后一位,两位,三位,四位--获取年的最后一位selectto_char(sysdate,'Y')fromdual;--获取年的最后两位selectto_char(sysdate,'YY')fromdual;--获取年的最后三位selectto_char(sysdate,'YYY')fromdual;--获取年的最后四位select......
  • python编译成可执行文件
    安装pipinstallpyinstaller执行pyinstaller--onefilexxxxx.py会在当前文件的同级目录生成dist文件夹,可执行文件就在里面......
  • Python通过tushare获取股票历史数据
    一、使用Tushare获取可参照官网:https://tushare.pro/步骤1:安装Tushare库在Python环境中使用pip命令安装Tushare库:pipinstalltushare步骤2:导入Tushare库在Python代码中导入Tushare库:importtushareasts步骤3:设置TushareToken在使用Tusha......
  • 基于python开发的股市行情看板
    近期股市又骚动起来,回忆起昔日炒股经历,历历在目,悲惨经历让人黯然神伤,去年共投入4000元入市,最后仅剩1000多,无奈闭关修炼,忘记股市,全身心投入代码世界,享受代码带来的乐趣。近日,当看到别人用python进行量化投资暴富的消息,顿时振奋,立刻学习起python数据分析之道,开发了一个股市行情看板,希......
  • 基于python的种子搜索网站-开发过程
    本讲会对种子搜索网站的开发过程进行详细的讲解。 项目开发过程项目简介该项目是基于python的web类库django开发的一套web网站,做为本人的毕业设计。本人的研究方向是一项关于搜索的研究项目。在该项目中,笔者开发了一个简单版的搜索网站,实现了对数据库数据的检索和更新。网站域名......
  • core中间件全局日志
    参考学习项目zradmin在Configure中配置请求参数缓存//使可以多次多去body内容app.Use((context,next)=>{context.Request.EnableBuffering();returnnext();//请求通道走向下一步});在Configure......