全局解释器锁GIL:在同一时刻仅有一个线程可被调度执行。对于单核环境,该实现简单高效。对于多线程的并发应用,一般通过多进程加协程充分发挥多核计算能力。

对于I/O密集型任务,线程发生阻塞时,会自动释放GIL锁,以便其他进程执行。所以 I/O密集型适合使用多线程

对于CPU执行,任务则采用超时策略。

网络I/O密集型的多线程与单线程比较:(计算cpu密集型只能通过多进程改善或者是通过C来编写多线程以便绕过GIL,此例是测试的I/O密集型)

import threading
import requests
import sys def task():
""" 网络I/O """
result = requests.get('http://source.unsplash.com/random') # status_code
with open(f"{str(uuid.uuid1().hex)}.jpg", 'wb') as f:
f.write(result.content)
return result print(sys.argv)
if len(sys.argv)>1:
ts = [threading.Thread(target=task) for i in range(10)]
for t in ts: t.start()
for t in ts: t.join()
else:
[task() for i in range(10)] >>>
(djProj_py3) appledeMacBook-Air-7:practice apple$ time python ff.py a # 线程启动
['ff.py', 'a'] real 0m13.583s
user 0m0.565s
sys 0m0.110s
(djProj_py3) appledeMacBook-Air-7:practice apple$ time python ff.py # 非线程启动
['ff.py'] real 0m39.777s
user 0m0.566s
sys 0m0.112s

python-GIL的更多相关文章

  1. Celery如何修复Python的GIL问题

    小结: 1. Celery如何修复Python的GIL问题https://python.freelycode.com/contribution/detail/346 最近,我重读了Glyph写的Uny ...

  2. [转载] Python的GIL是什么鬼,多线程性能究竟如何

    原文: http://cenalulu.github.io/python/gil-in-python/ GIL是什么 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器( ...

  3. 使用进程池规避Python的GIL限制

    操作系统 : CentOS7.3.1611_x64 python版本:2.7.5 问题描述 Python的GIL会对CPU密集型的程序产生影响,如果完全使用Python来编程,怎么避开GIL的限制呢? ...

  4. Python的GIL机制与多线程编程

    GIL 全称global interpreter lock 全局解释锁 gil使得python同一个时刻只有一个线程在一个cpu上执行字节码,并且无法将多个线程映射到多个cpu上,即不能发挥多个cpu ...

  5. 004_浅析Python的GIL和线程安全

    在这里我们将介绍Python的GIL和线程安全,希望大家能从中理解Python里的GIL,以及GIL的前世今生. 对于Python的GIL和线程安全很多人不是很了解,通过本文,希望能让大家对Pytho ...

  6. Python中GIL

    GIL(global interpreter lock)全局解释器锁 python中GIL使得同一个时刻只有一个线程在一个cpu上执行,无法将多个线程映射到多个cpu上执行,但GIL并不会一直占有,它 ...

  7. Python GIL 系列之再谈Python的GIL

    1. 之前写过一篇<通过实例认识Python的GIL>的文章,感觉有些意犹未尽 2. 这次对例子作了些扩展,进一步的分析GIL对Python程序的影响 2.1 先来看例子: [python ...

  8. Python的GIL是什么鬼,多线程性能究竟如何

    前言:博主在刚接触Python的时候时常听到GIL这个词,并且发现这个词经常和Python无法高效的实现多线程划上等号.本着不光要知其然,还要知其所以然的研究态度,博主搜集了各方面的资料,花了一周内几 ...

  9. 我大概知道他在说什么了,是对内存单元的竞争访问吧。Python有GIL,在执行伪码时是原子的。但是伪码之间不保证原子性。 UDP丢包,你是不是做了盲发?没有拥塞控制的情况下,确实会出现丢包严重的情况。你先看看发送速率,还有是否带有拥塞控制。

    我大概知道他在说什么了,是对内存单元的竞争访问吧.Python有GIL,在执行伪码时是原子的.但是伪码之间不保证原子性.   UDP丢包,你是不是做了盲发?没有拥塞控制的情况下,确实会出现丢包严重的情 ...

随机推荐

  1. FastReport问题整理(http://129.sqdj.gov.cn/?p=77)

    1.FastReport中如果访问报表中的对象?可以使用FindObject方法.TfrxMemoView(frxReport1.FindObject(’memo1′)).Text:=’FastRep ...

  2. C++Builder 网站。记住学习

    http://www.ccrun.com/ C++Builder

  3. #ifdef __cplusplus extern "C" { #endif 含义

    转载! 1.在好多程序中我们会遇到下面代码段 #ifdef __cplusplus         extern "C" {         #endif //c语法代码段 #if ...

  4. DS树+图综合练习--带权路径和

    题目描述 计算一棵二叉树的带权路径总和,即求赫夫曼树的带权路径和. 已知一棵二叉树的叶子权值,该二叉树的带权案路径和APL等于叶子权值乘于根节点到叶子的分支数,然后求总和.如下图中,叶子都用大写字母表 ...

  5. 详细记录sql运行时间(精确到毫秒)

    写程序的人,往往需要分析所写的SQL语句是否已经优化过了,服务器的响应时间有多快,这个时候就需要用到SQL的STATISTICS状态值来查看了. 通过设置STATISTICS我们可以查看执行SQL时的 ...

  6. pytest.3.Assert

    From: http://www.testclass.net/pytest/assert/ Assert就是断言,每个测试用例都需要断言. 与unittest不同,pytest使用的是python自带 ...

  7. [蓝桥杯]ALGO-101.算法训练_图形显示

    问题描述 编写一个程序,首先输入一个整数,例如5,然后在屏幕上显示如下的图形(5表示行数): * * * * * * * * * * * * * * * 题目描述 代码如下: #include < ...

  8. Ubuntu 14.10 下Hadoop代码编译问题总结

    问题1  protoc (compile-protoc) on project hadoop-common: org.apache.maven.plugin.MojoExecutionExceptio ...

  9. [转][PowerShell]ps执行重启IIS

    来自:https://www.aliyun.com/jiaocheng/871477.html write-output 'Restarting IIS servers ............... ...

  10. IPSec

    一. +IPSec(IP Security)Internet 协议安全性 是IFTF制定的为保证在Internet上传送数据的安全保密性能的框架协议 +IPSec包括报文验证头协议AH(协议号51)和 ...