Tornado的 tornado.queues 模块实现了异步生产者/消费者模式的协程,类似于通过Python 标准库的 queue 实现线程模式。
一个yields Queue.get 的协程直到队列中有值的时候才会暂停。如果队列设置了最大长度,yields Queue.put 的协程直到队列中有空间才会暂停。
一个 Queue 从0开始对未完成的任务进行计数, put 加计数; task_done 减少计数。
这里的网络爬虫的例子,队列开始的时候只包含 base_url。当一个 worker 抓取到一个页面它会解析链接并把它添加到队列中,然后调用 task_done 减少计数一次。最后,当一个 worker 抓取到的页面 URL 都是之前抓取到过的并且队列中没有任务了。于是 worker 调用 task_done 把计数减到0。等待 join 的主协程取消暂停并且完成。
| 1 | #!/usr/bin/env python | 
Read More: