前言:

    今天就写点gevent的高级点的用法,对于我来说 这些也是常用的gevent模块。

gevent的AsyncResutl模块的用途,看字眼的意思是一个异步的任务的结果。 其实官方的说法也让人有些发蒙。  其实说白了就是协程间的通信,我是老板,让大哥和小弟同事去收账,小弟做完了后,会等大哥来问话。 如果小弟没有完成,还在做着事情,那大哥会在一个时间里,等待小弟返回结果。一直等 !


在实战中这个就很有意思了。   我们同时做一个事情,但是我们又需要互相的帮助,或者是互相的通信。  这个时候就可以用asyncresult。 

wKiom1PnhUWzgzDyAALebVnD0sk717.jpg

wKiom1PnhcfCgQR1AACraArCixU937.jpg

这里是gevent的事件用法。rawlink是注册一个回调,wait是等待任务的完成之后,才能后续进行。    他的用法有些像twisted的一些思想,注册事件,事件和回调函数关联。    gevent最大的优势是用同步的写法,实现异步的功能。 所以这功能不太实用。 

e = Event()

e.rawlink(callback_def)

e.wait()

e.xxx


wKioL1Pnh1_BrCEqAADmho95wNE429.jpg

gevent自己有个gevent.queue,我自己没做测试,倒是看一些老外再谈论,在数据大的数据的时候,要比pyhton queue本身的队列要抗用。


gevent queue 的队列功能很是丰富 ! 

下面是一个比较完整的例子,大家跑跑:


wKiom1PnhtzwO_JeAAKZRTYXFXo430.jpg

gevent队列的方法还是很牛叉的。 比如put 推送队列,get取出队列,里面可以加几个选项 堵塞和超时时间。


外加一个gevent执行状态的判断。


wKioL1PnjTOgO7K3AAOYOijH5_w822.jpg



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!

关于gevent queue遭遇hub.LoopExit问题

我的上下文 “ gevent.hub.LoopExit: This operation would block forever”   ,   使用过gevent queue的朋友估摸会遇到这...

阅读全文

源码分析之gevent monkey.patch_all实现原理

我发现最近总是跟一些python的标准库及第三方的库干上了。 平时没怎么关注,但只要一遇到问题,就想刨根问底分析源代码 ! 这样不仅解决当前问题,还能学习下...

阅读全文

python下multiprocessing和gevent的组合使用

对于有些人来说Gevent和multiprocessing组合在一起使用算是个又高大上又奇葩的工作模式.   Python的多线程受制于GIL全局锁的特性,Gevent身为协...

阅读全文

1则回应给“谈谈gevent的协程间通信及队列和事件event用法”

  1. 蒙卓说道:

    gevent的状态 应该是greenlet的状态

发表评论