101围棋网

在线做围棋死活题 ...

↑我也要推荐

Gevent 任务的持续追加和执行

发布时间:2011-06-22 06:39:52, 关注:+9456, 赞美:+8, 不爽:+10

原始出处: 曹元的水果篮子

刚开始接触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与普通队列有啥区别捏,嘿嘿,还米有研究。暂时先这么滴吧,达成目的先。 

标准的 池接队列 。 
啥也不说了,打完收工。 

欲知大杀器究竟如何,待俺研究透了再作分解~

如果你觉得本站对你有帮助,欢迎向本站赞助 :P

使用支付宝捐赠

Copyright© Python4cn(news, jobs) simple-is-better.com, 技术驱动:powered by web.py 空间主机:Webfaction

版权申明:文章转载已注明出处,如有疑问请来信咨询。本站为 python 语言推广公益网站,与 python 官方没有任何关系。

联系/投搞/留言: en.simple.is.better@gmail.com 向本站捐赠