python38_每天学一点python 38---杂

本文通过实验探讨Python的全局解释器锁(GIL)对多线程性能的影响,展示并发执行并不一定比顺序执行快,并简单介绍了GIL的概念。
摘要由CSDN通过智能技术生成

#老板否定了我弄了半个月的东西,然后觉得我2天做出来的东西挺好的...

#可能这就是面向老板编程吧...

#然后开始发现需要用响应式来面对各种尺寸的屏幕,有点蛋疼,说明代码还是写得不好,稍有变化改动的地方还是很多,想写一个改代码补丁,在可能需要改的地方加上mark,然后直接在多处代码上修改...

#最近开始看vue的router和vuex,以前只是使用vuejs,现在开始全家桶了...

我们都知道python有一个GIL的,说是python多线程不能有效利用多核,注意,这里是有效利用,而不是不能用多核。我们在开多线程的时候也是可以把cpu跑满的,但是是不是真的有效利用了呢?

姑且做一个实验。

import threading

from datetime import datetime as dt

def fnc():

#用上了昨天的那个小特性

a=0

while a<10000_0000:

a+=1

time_before=dt.now()

t1=threading.Thread(target=fnc)

t2=threading.Thread(target=fnc)

t1.start()

t1.join()

t2.start()

t2.join()

time_after=dt.now()

time=time_after-time_before

print(time.total_seconds())

这里我们定义了一个无聊函数,从0加到一亿(我发现用了下划线确实清晰不少....)

然后开两个线程,让线程一条一条的执行。

输出3次的时间。。

>>>

14.239966

>>>

13.286471

>>>

13.639575

大概是会花这么多时间,

然后我们让这两个线程同时跑

import threading

from datetime import datetime as dt

def fnc():

a=0

while a<10000_0000:

a+=1

time_before=dt.now()

t1=threading.Thread(target=fnc)

t2=threading.Thread(target=fnc)

t1.start()

t2.start()

t1.join()

t2.join()

time_after=dt.now()

time=time_after-time_before

print(time.total_seconds())

输出时间

>>>

13.664039

>>>

15.495306

>>>

14.705491

同时跑反而还慢一些,虽然实验并不严谨,但应该能让你多多少少体会到GIL的意思。

最后我试着直接call无聊函数2次

fnc()

fnc()

>>>

13.494611

好吧,跟顺序执行差不多..

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值