asyncio

Python与协程从Python2—Python3

不想你离开。 提交于 2019-12-04 03:57:40
协程,又称微线程、纤程,英文名Coroutine;用一句话说明什么是线程的话:协程是一种用户态的轻量级线程。 Python对于协程的支持在python2中还比较简单,但是也有可以使用的第三方库,在python3中开始全面支持,也成为python3的一个核心功能,很值得学习。 协程介绍 协程,又称微线程、纤程,英文名Coroutine;用一句话说明什么是线程的话:协程是一种用户态的轻量级线程。 协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此:协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开时所处逻辑流的位置。 协程的优点: 1)无需线程上下文切换的开销 2)无需原子操作锁定及同步的开销 3)方便切换控制流,简化编程模型 4)高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理。 协程的缺点: 1)无法利用多核资源:协程的本质是个单线程,它不能同时将 单个CPU 的多个核用上,协程需要和进程配合才能运行在多CPU上 2)进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序 Python2中的协程 yield关键字 Python2对于协程的支持,是通过yield关键字实现的

[连载 1] 如何将协议规范变成开源库系列文章之 WebSocket

筅森魡賤 提交于 2019-11-29 23:26:16
这是系列文章的第一篇,也是非常重要的一篇,希望大家能读懂我想要表达的意思。 系列文章开篇概述 相对于其他编程语言来说,Python 生态中最突出的就是第三方库。任何一个及格的 Python 开发者都使用过至少 5 款第三方库。 就爬虫领域而言,必将用到的例如网络请求库 Requests、网页解析库 Parsel 或 BeautifulSoup、数据库对象关系映射 Motor 或 SQLAlchemy、定时任务 Apscheduler、爬虫框架 Scrapy 等。 这些开源库的使用方法想必大家已经非常熟练了,甚至还修炼出了自己的一套技巧,日常工作中敲起键盘肯定也是哒哒哒的响。 但是你有没有想过: 那个神奇的功能是如何实现的? 这个功能背后的逻辑是什么? 为什么要这样做而不是选择另一种写法? 编写这样的库需要用到哪些知识? 这个论点是否有明确的依据? 如果你从未这样想过,那说明你还没到达应该「渡劫」的时机;如果你曾提出过 3 个以上的疑问,那说明你即将到达那个重要的关口;如果你常常这么想,而且也尝试着寻找对应的答案,那么恭喜你,你现在正处于「渡劫」的关口之上。 偶有群友会抛出这样的问题:初级工程师、中级工程师、高级工程师如何界定? 这个问题有两种不同的观点,第一个是看工作职级,第二个则是看个人能力。工作职级是一个浮动很大的参照物,例如阿里巴巴的高级研发和我司的高级研发,职级名称都是