4_queue_concurrent_web_spider
Queue example => 并发网络蜘蛛
Tornado 的 tornado.queues 模块为协程实现了异步生产者/消费者模式,类似于 Python 标准库的队列模块为线程实现的模式。
产生 Queue.get 的协程会暂停,直到队列中有一个项目。如果队列有最大大小 se,则产生 Queue.put 的协程将暂停,直到有空间容纳另一个项目。
队列维护未完成任务的计数,从零开始。 put 增加计数; task_done 会减少它。
在此处的网络蜘蛛示例中,队列开始时仅包含 base_url。当工作人员获取页面时,它会解析链接并将新链接放入队列中,然后调用 task_done 来递减计数器 1。最终,worker 获取了一个其 URL 之前都已经见过的页面,并且队列中也没有剩余的工作。因此,该工作人员对 task_done 的调用会将计数器递减至零。正在等待加入的主协程未暂停并完成。
点击这里阅读web_spider.py
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 xhj的博客!