02 2017 档案
摘要:lazy形容词,懒惰的,毫无疑问是一个贬义词。但是,对于计算机领域,lazy却是非常重要的优化思想:把任务推迟到必须的时刻,好处是避免重复计算,甚至不计算。本文的目的是抛砖引玉,总结一些编程中的lazy idea,以期有一些启发。google “lazy”这个单词,在计算机领域高频出现三个词:laz
阅读全文
摘要:由于GIL的原因,笔者在日常开发中几乎没有用到python的多线程。如果需要并发,一般使用多进程,对于IO Bound这种情况,使用协程也是不错的注意。但是在python很多的网络库中,都支持多线程,基本上都会使用到threading.local。在python中threading.local用来表
阅读全文
摘要:本文主要介绍在网络请求中的同步与异步,以及异步的表现形式: 回调与协程,并通过python代码展示各自的优缺点。 概念上下文: 当提到同步与异步,大家不免会想到另一组词语:阻塞与非阻塞。通常,同时提到这个这几个词语一般实在讨论network io的时候,在《unix network programm
阅读全文
摘要:之前在开发中就发现“dirty”是一种不错的解决方案:可以用来延缓计算或者避免不必要的计算。后来在想,这应该也算一种设计模式吧,于是搜索“Dirty设计模式”,没有什么结果,然后换成英文“Dirty design pattern”,搜到了《game programming patterns》这本电子
阅读全文
摘要:在前文已经介绍过了gevent的调度流程,本文介绍gevent一些重要的模块,包括Timeout,Event\AsynResult, Semphore, socket patch,这些模块都涉及当前协程与hub的切换。本文分析的gevent版本为1.2 Timeout 这个类在gevent.time
阅读全文
摘要:在前面的文章曾介绍过gunicorn的syncworker,本文介绍其中一种asyncworker:GeventWorker。类图如下: 可见GeventWorker重载了init_process(这个方法是Worker唯一暴露给外界的接口),源码如下: 1 def init_process(sel
阅读全文
摘要:gevent是目前应用非常广泛的网络库,高效的轮询IO库libev加上greenlet实现的协程(coroutine),使得gevent的性能非常出色,尤其是在web应用中。本文介绍gevent的调度流程,主要包括gevent对greenlet的封装和使用,以及greenlet与libev的协作。阅
阅读全文