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资源占有率:
我们发现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%,说明进程是可以利用多核的!
来源: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