刚开始接触gevent,特喜欢其中Coroutine的轻便。
前两天一直纠结于如何进行任务追加,目前摸索的情况是gevent似乎并不支持coroutine的追加,因为一直限制在这种想法中,迟迟无法迈步。看到有同事玩多线程,才恍然,所谓任务,无非就是对拥有特定格式的数据进行解析、执行,既然无法追加coroutine,那可以追加数据啊。下面的做法就几乎与多线程一致了。
做一组池,接入队列就齐活了。
哦,慢着!用队列接数据的话,不就会陷入阻塞了么,还有gevent的模式就是在coroutine陷入阻塞时将控制权限让回给调度器,用池的方式接队列,这个似乎有点...
gevent早就有了大杀器:JoinableQueue
def worker():
while True:
item = q.get()
try:
do_work(item)
finally:
q.task_done()
q = JoinableQueue()
for i in range(num_worker_threads):
gevent.spawn(worker)
for item in source():
q.put(item)
q.join() # block until all tasks are done
这是官方doc中提供的代码(杯具啊,翻了N遍文档,就是没看queue这块..)
那么gevent提供的JoinableQueue与普通队列有啥区别捏,嘿嘿,还米有研究。暂时先这么滴吧,达成目的先。
标准的 池接队列 。
啥也不说了,打完收工。
欲知大杀器究竟如何,待俺研究透了再作分解~
分享到:
相关推荐
在windows下安装gevent的安装包,安装方法很简单。具体参考我在csdn的博客。 http://blog.csdn.net/ruguokeyi110/article/details/47725545
Gevent指南.pdf
gevent 1.0 for win32 python 2.7
模块gevent压缩包
主要介绍了Python使用grequests并发发送请求过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
gevent 1.0rc2 for windows
本文实例讲述了Python 协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法。分享给大家供大家参考,具体如下: 实现多任务:进程消耗的资源最大,线程消耗的资源次之,协程消耗的...
python Gevent程序员指南 中文翻译
本文档是非常详尽的gevent学习教程,可以使你更深入的了解python的gevent
python协程gevent编写的异步web服务器,由python和第三方包gevent,socket编写
由Gevent社区编写 gevent是一个基于libev的并发库。它为各种并发和网络相关的任务提供了整洁的API。
gevent源代码共享。
当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行。由于IO操作非常耗时,经常使程序处于等待状态,有了gevent为我们自动切换协程,就保证总...
如果不想安装gevent可以下载gevent-1.0-py2.7-linux.egg gevent-1.0dev-macosx-intel.egg放local文件夹
gevent调度不可或缺的一个组件,无限优化我们的代码。
gevent-zeromq, pyzeromq gevent compat lib deprecate !这项工作已经合并到了 pyzmq gevent客户端这个库包装 pyzmq,使它与gevent兼容。 要求pyzmq==2.2.0gevent ( 与 1.0个pre发行版兼容)用法要直接
使用gevent,可以对并发多个http请求的爬虫程序进行很好的优化, 缺点是,安装相对麻烦,这个包依赖于libevent,在windows下面用easy_install直接安装是不行的,福利来了,windowns版本的安装包一枚
协程是一种并发模型,但不同于thread和callback,它的所有task都是可以在一个线程里面执行,然后可以通过在一个task里面主动放弃执行来切换到另一个task执行,它的调度是程序级的,不像thread是系统级的调度。...
适合windows下python 3.8版本的 gevent依赖库 x64 x32 双版本都有 把文件放到相应的安装路径 Python38\Lib\site-packages 执行pip install gevent 相应版本的.whl
Mr. Queue -一个 Python 的分布式 worker 任务队列, 使用 Redis 和 gevent