之前一直很好奇像sanic或者aiohttp是如何实现并发的,其实从网上看无非就是使用了asyncio,更底层就是事件驱动,libevent之类的,但是纯从应用层来讲,这个会是怎么一回事呢,举个例子:
1 |
|
从上面代码来看,整个执行周期为3s,但是有个问题是:如果请求一个一个来,如何不阻塞呢??
1 |
|
如果按照例如eventlet的做法:
1 | procpool = GreenPool(size=poolsize) |
消息过来,直接抛给pool,并不会进行阻塞,并且有poolsize控制池大小,
额,这里是sanic源码中的一部分…
1 | # -*- coding: utf-8 -*- |