我们打开程序后,会发现电脑的内存和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资源占有率:

我们发现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

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

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

本文标题: python3爬虫GIL修改多线程实例讲解

本文地址: http://www.cppcns.com/jiaoben/python/366162.html

python3线程gil_python3爬虫GIL修改多线程实例讲解相关推荐

  1. python3线程池爬虫_python3爬虫中多线程的优势总结

    有些小伙伴跟小编讨论了python中使用多线程原理的问题,就聊到了关于python多线程的弊端问题,这点可能在使用的过程中大家会能感觉到.而且之前讲过的GIL也是对python多线程的一种限制.那么, ...

  2. python3线程池爬虫_python3多线程爬虫中如何变量?

    我们可以把待处理的程序看成一批需要配送的包裹,包裹在不同的货架上摆放.单人整理会比几个人一起摆放要慢的多.同样在计算机处理中,单凭借一个程序打开运行是远远不够用的,我们需要同时处理多个事物,所以多线程 ...

  3. python多线程爬虫实例-Python3多线程爬虫实例讲解代码

    多线程概述 多线程使得程序内部可以分出多个线程来做多件事情,充分利用CPU空闲时间,提升处理效率.python提供了两个模块来实现多线程thread 和threading ,thread 有一些缺点, ...

  4. 爬虫-python -(8) 多线程与多进程操作以及线程池 异步操作

    文章目录 1.通过异步操作提高爬虫效率 2.多线程 3.多进程 4.线程池与进程池 5.线程池实例-新发地菜价保存 6.总结 1.通过异步操作提高爬虫效率 一般爬虫过程为,请求网页-响应请求-从响应中 ...

  5. python3.5怎么打开_Python3.5文件修改操作实例分析

    Python3.5文件修改操作实例分析 本文实例讲述了Python3.5文件修改操作.分享给大家供大家参考,具体如下: 1.文件修改的两种方式 (1)像vim一样将文件加载到内存中,修改完之后再写回源 ...

  6. 面向 CPython GIL 的多线程编程要点

    目录 文章目录 目录 Python GIL Python GIL 对线程并发性能的影响 保留 GIL 的历史原因 为了兼顾解释型语言的简单 为了兼顾 C 程序库的安全 Python 的多线程编程要点 ...

  7. python可以开多少线程_python爬虫可以开多少线程?

    其实关于爬虫并没有明确多少数量开线程,因为这个是无穷的,随着时代的不断发展,每一个革新都给我们焕然一新的感觉,可能大家现在在学习的时候,已知内容是有限的,真正在不断探索以后,会发现这个内容是无穷了,小 ...

  8. Python 第八篇:异常处理、Socket语法、SocketServer实现多并发、进程和线程、线程锁、GIL、Event、信号量、进程间通讯...

    本节内容: 异常处理.Socket语法.SocketServer实现多并发.进程和线程.线程锁.GIL.Event.信号量.进程间通讯.生产者消费者模型.队列Queue.multiprocess实例 ...

  9. 爬虫--05:多线程与生产者消费者模型

    Crawler - 05: Multithreading- und Produzenten-Verbrauchermodell 多线程 一.多线程的基本介绍 1.介绍 2.程序中模拟多任务 二.创建多 ...

最新文章

  1. Netsclaer配置
  2. 由Qt中qApp想到的(这是单例模式么???)
  3. File::Path管理多级目录
  4. oracle 11g dataguard创建的简单方法
  5. 6月14号=》136页-145页
  6. 8.总线设备驱动模型
  7. Windows 10 开启卓越性能模式
  8. HTML做一个传统节日端午节 带设计报告4500字
  9. 用ip地址远程登录linux的软件,如何远程登陆已知 IP地址的电脑?
  10. JDBC实现多条件查询万能解决思路
  11. 计算语言学之语法理论
  12. ASP模式的机械产品分布式协同设计的研究
  13. 使用 GCM 网络管理工具优化电池使用
  14. 一遍过的刷四史脚本教程
  15. 网络骗子的特征。大家一定要转载。
  16. android+高仿iphone,网购iPhone7P的失败经历,原来是安卓高仿!
  17. .NET Framework 框架简介
  18. 基于Gmail建立稳定免费的企业邮件系统-实现移动Pushmail办公篇
  19. 【矩阵论】4. 矩阵运算——广义逆——加号逆的计算
  20. Scatter文件编写

热门文章

  1. 使用JS实现文字搬运工
  2. [vue插件]基于vue2.x的电商图片放大镜插件
  3. 皮肤可配置化:变量、样式分离
  4. python 数据类型之间的转换
  5. 【USACO2006 Mar】滑雪缆车 skilift
  6. width:100vh与min-height:calc(100vh + 51px)
  7. Error0---local variable S is accessed from within inner class; needs to be declared final
  8. 手机调用系统的拍照和裁剪功能,假设界面有输入框EditText,在一些手机会出现点击EditText会弹出输入法,却不能输入的情况。...
  9. oracle 老白,老白学编程 - Netdata学习 - numa
  10. windows和linux允许分片,请问hadoop的hdfs文件系统和本地windows文件系统或linux文件系统是什么关系啊,谢谢...