根据源码,我们来到了下面这一段代码:
main_greenlet = runner.greenlet
OK,终于来到了我们的greenlet了。这是locust灵魂所在,没它,就没所谓的并发了。runner从它的父类Runner继承而来的greenlet属性,就是Group()。至于Group类的源码我们就不一一呈现在此了。
我们先简单介绍一下gevent:
由于之前我们介绍过yield和yield from,所以这里就不长篇大论copy文章了。总结一句话就是,通过它,使得我们的线程变成了协程,遇到IO阻塞的时候我们的cpu马上去干别的事情,等IO工作结束了,我们再回来接收下一步工作。这样我们就可以充分利用我们的cpu,并且减少了内核切换引起的性能开销。而yield显得太过低级了,所以我们就用上了gevent,它能给予我们更多的支持。
gevent的核心来自类Greenlet,而它继承greenlet。所以我们首先介绍一下greenlet的基本用法吧。
-
greenlet
greenlet是一个python的c扩展,我们之前通过yield 只能将结果返回给调用者&