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

作者:小妮浅浅 时间:2023-06-09 22:33:58 

我们打开程序后,会发现电脑的内存和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%,说明进程是可以利用多核的!

来源:https://www.py.cn/jishu/jichu/21183.html

标签:python3,GIL,多线程
0
投稿

猜你喜欢

  • python time时间库详解

    2023-10-09 03:20:57
  • 一个提高了近10%转化率的改进

    2009-05-22 12:40:00
  • Python open读写文件实现脚本

    2022-08-23 00:26:46
  • MySQL 两张表数据合并的实现

    2024-01-28 07:25:49
  • PHP substr()函数参数解释及用法讲解

    2023-11-24 11:47:56
  • 基于Python制作短信发送程序

    2022-06-19 16:47:25
  • Oracle数据库密码文件的使用与维护

    2010-07-28 13:27:00
  • Python写的贪吃蛇游戏例子

    2023-06-26 15:50:55
  • django模型中的字段和model名显示为中文小技巧分享

    2021-04-01 15:03:54
  • [译文]The seven rules of Unobtrusive JavaScript

    2008-09-29 12:10:00
  • Autopep8的使用(python自动编排工具)

    2022-07-04 11:10:47
  • python禁用键鼠与提权代码实例

    2022-12-11 11:54:59
  • 提高javascript的速度系列(序)

    2008-07-15 12:38:00
  • 十个节省时间的MySQL命令小结

    2024-01-13 07:18:14
  • 如何取得刚添加的记录自动增加的ID?

    2010-01-18 20:55:00
  • Python实现Const详解

    2021-06-24 16:18:40
  • JS字符串拼接的几种方式(最新推荐)

    2024-04-10 16:11:41
  • Transact_SQL小手册,适合初学者

    2008-08-25 19:40:00
  • python+tkinter编写电脑桌面放大镜程序实例代码

    2023-08-02 17:10:43
  • 使用element-ui +Vue 解决 table 里包含表单验证的问题

    2024-05-28 16:00:02
  • asp之家 网络编程 m.aspxhome.com