python3线程gil_python3.7多线程中的GIL行为

我正在研究并试图理解pythongil和在python中使用多线程的最佳实践。我找到了this presentation和{a2}

我试图重现演示文稿前4张幻灯片中提到的奇怪和疯狂的问题。讲师在视频中也提到了这个问题(前4分钟)。

我写了这个简单的代码来重现这个问题from threading import Thread

from time import time

BIG_NUMBER = 100000

count = BIG_NUMBER

def countdown(n):

global count

for i in range(n):

count -= 1

start = time()

countdown(count)

end = time()

print('Without Threading: Final count = {final_n}, Execution Time = {exec_time}'.format(final_n=count, exec_time=end - start))

count = BIG_NUMBER

a = Thread(target=countdown, args=(BIG_NUMBER//2,))

b = Thread(target=countdown, args=(BIG_NUMBER//2,))

start = time()

a.start()

b.start()

a.join()

b.join()

end = time()

print('With Threading: Final count = {final_n}, Execution Time = {exec_time}'.format(final_n=count, exec_time=end - start))

但结果与纸和视频完全不同!

有线程和没有线程的执行时间几乎相同。有时两种情况中的一种比另一种快一些。在

这是我在Windows10下使用CPython3.7.3,使用多核架构处理器得到的结果。在

^{pr2}$

另外我根据视频和论文的理解是GIL阻止了两个线程同时在两个内核中并行执行。如果这是真的,那么为什么final count变量(在多线程的情况下)不是如预期的那样为零,并且在每次执行结束时都是一个不同的数字,这可能是因为同时操作了线程?

比起视频和报纸(使用Python3.2)来说,在新的pythons中GIL会发生什么变化吗?

提前谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值