python3爬虫GIL修改多线程实例讲解


Posted in Python onNovember 24, 2020

我们打开程序后,会发现电脑的内存和cpu发生了变化。在对于前者上面,自然是希望内容占用小,cpu的利用越高越好。那有没有什么方法可以让我们的cpu达到满状态的运行效果呢?这就得用到我们所学的多线程中的知识了,再正式开始讲解之前,我们先来说说操作的思路吧,然后进行代码对比。

我们都知道,比方我有一个4核的CPU,那么这样一来,在单位时间内每个核只能跑一个线程,然后时间片轮转切换。但是Python不一样,它不管你有几个核,单位时间多个核只能跑一个线程,然后时间片轮转。看起来很不可思议?但是这就是GIL搞的鬼。任何Python线程执行前,必须先获得GIL锁,然后,每执行100条字节码,解释器就自动释放GIL锁,让别的线程有机会执行。这个GIL全局锁实际上把所有线程的执行代码都给上了锁,所以,多线程在Python中只能交替执行,即使100个线程跑在100核CPU上,也只能用到1个核。通常我们用的解释器是官方实现的CPython,要真正利用多核,除非重写一个不带GIL的解释器。我们不妨做个试验:

#coding=utf-8
from multiprocessing import Pool
from threading import Thread
from multiprocessing import Process
def loop():
  while True:
    pass
if __name__ == '__main__':
  for i in range(3):
    t = Thread(target=loop)
    t.start()
  while True:
    pass

我的电脑是4核,所以我开了4个线程,看一下CPU资源占有率:

python3爬虫GIL修改多线程实例讲解 

我们发现CPU利用率并没有占满,大致相当于单核水平。

而如果我们变成进程呢?

我们改一下代码:

#coding=utf-8
from multiprocessing import Pool
from threading import Thread
from multiprocessing import Process
def loop():
  while True:
    pass
if __name__ == '__main__':
  for i in range(3):
    t = Process(target=loop)
    t.start()
    Pass

python3爬虫GIL修改多线程实例讲解

结果直接飙到了100%,说明进程是可以利用多核的!

以上就是python3爬虫GIL修改多线程实例讲解的详细内容,更多关于python3爬虫中的GIL修改多线程的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
c++生成dll使用python调用dll的方法
Jan 20 Python
让python在hadoop上跑起来
Jan 27 Python
Python实现基本数据结构中栈的操作示例
Dec 04 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
May 05 Python
python绘制评估优化算法性能的测试函数
Jun 25 Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 Python
安装python及pycharm的教程图解
Oct 10 Python
python实现广度优先搜索过程解析
Oct 19 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
May 09 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
Jun 02 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
Sep 21 Python
Python监听键盘和鼠标事件的示例代码
Nov 18 Python
Django URL参数Template反向解析
Nov 24 #Python
python3爬虫中引用Queue的实例讲解
Nov 24 #Python
python3爬虫中多线程的优势总结
Nov 24 #Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
Nov 24 #Python
python 如何停止一个死循环的线程
Nov 24 #Python
python将下载到本地m3u8视频合成MP4的代码详解
Nov 24 #Python
Python做图像处理及视频音频文件分离和合成功能
Nov 24 #Python
You might like
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
php线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
关于PHP模板Smarty的初级使用方法以及心得分享
2013/06/21 PHP
php_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
PHP代码实现表单数据验证类
2015/07/28 PHP
PHP实现活动人选抽奖功能
2017/04/19 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
2019/06/12 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
window.showModalDialog使用手册
2007/01/11 Javascript
jquery自动完成插件(autocomplete)应用之PHP版
2009/12/15 Javascript
JS操作HTML自定义属性的方法
2015/02/10 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
2015/06/25 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
2015/10/27 Javascript
JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解
2016/05/31 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
canvas时钟效果
2017/02/16 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
2017/05/02 Javascript
vue.js2.0点击获取自己的属性和jquery方法
2018/02/23 jQuery
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
jQuery弹框插件使用方法详解
2020/05/26 jQuery
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
[01:03:42]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
wxPython定时器wx.Timer简单应用实例
2015/06/03 Python
python3制作捧腹网段子页爬虫
2017/02/12 Python
python中的set实现不重复的排序原理
2018/01/24 Python
50道外企软件测试面试题
2014/08/18 面试题
实习教师自我鉴定
2013/09/27 职场文书
会计专业毕业生自我鉴定
2013/10/29 职场文书
一月红领巾广播稿
2014/02/11 职场文书
中班中秋节活动反思
2014/02/18 职场文书
竞选副班长演讲稿
2014/04/24 职场文书
新颖的化妆品活动方案
2014/08/21 职场文书
2014年大堂经理工作总结
2014/11/21 职场文书
《认识年月日》教学反思
2016/02/19 职场文书
党风廉政承诺书2016
2016/03/25 职场文书