对于有些人来说Gevent和multiprocessing组合在一起使用算是个又高大上又奇葩的工作模式.  

Python的多线程受制于GIL全局锁的特性,Gevent身为协程也是线程的一种,只是io调度上自己说了算而已。 

那么如何使用多个cpu核心? 可以利用多进程mutliprocessing来进行多核并行工作,在多进程里面使用gevent协程框架可以更好的做io调度,相比线程来说减少了无谓的上下文切换.  


废话少说,直接上个例子.  下面是多进程下生产者消费者的工作模式,代码本身很简单,自己跑一下就知道怎么一回事了. 



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!
暂无相关产品
  1. 你好,我最近在调试一段gevent的代码,于是找到你的blog。我先跑了一下你的代码,我发现如果在consumer中,加入一些长时间的任务,比如这样: def _printq(self): while 1: value = self._queue.get() if value == 500: print ‘value is %d’ % value gevent.sleep(5) if value is None: self._queue.task_done() break else: print(“{0} time: {1}, value: {2}”.format(self.name, datetime.datetime.now(), value)) return必然的,在task的value为500的时候,整个程序就挂起了。有什么办法让这些长时间的任务不阻塞我的主程序呢?