今天在和FK聊天的时候,聊到了利用gevent的多进程模式,我和他交流了下,我的用法,其实模仿了php-fpm的进程模式,就是fork进程,然后开辟一个队列,这个队列是放链接的对象,然后每个进程里面也有一个gevent pool池另外还附带一个队列 。   main Thred的队列是用来存放用户请求的链接对象,子进程的队列是根据gevent pool的数量定制的队列。 

爬虫真牛逼,这里标记下gevent多进程的原文地址,xiaorui.cc

FK推荐了用 gipc ,这名字就很有含义,gevent + ipc的缩写。为什么要命名为gipc那?  gevent 身为协程的架构,他们直接自己就可以通信呀。 因为gipc是多进程的通信,gipc他简单的实现了gevent的多进程,他的通信也比较的简单,就是pipe,管道。 

gipc和一般的pipe一样,都是支持duplex双工参数。算是个小应用吧,个人觉得,gipc实现多进程的效率不见得有多高,也就图个方便吧。 

gipc生成子进程很简单,就直接start_process就可以了。 

下面是一个既有子进程,又可以互相通信的例子,需要大家先 pip install gipc

IPC管道模式的通信,用来做两个进程之间的通信,也就是说,顶多就两个进程互相玩,你非要搞成n个客户端也是可以的,但是调度又tm是问题。   另外咱们今天说的gipc又不支持多个客户端,还不如用multiprocessing的manager实现数据的共享来的实在,再少都给你封装好了。 



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

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

关于gevent queue遭遇hub.LoopExit问题

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

阅读全文

gevent通过socket补丁实现redis.py非阻塞

如题,gevent是使用socket补丁把redis.py改成异步非阻塞化. 异步非阻塞是个有点虚的话题,在python下使用gevent确实解决了io阻塞的问题。 业务场景需要pyth...

阅读全文

gevent源代码分析之用gevent threadpool实现多进程任务调度

这两天出了两个事故,一个是因为正负面的接口被被人疯狂访问而变得堵塞,导致整个动态网页解析解析的崩溃,最后redis挂掉。 还有一个事情是动态ip轮询模块...

阅读全文