我有一个web.py服务器响应各种用户请求.其中一个请求涉及下载和分析一系列网页.
有没有一种简单的方法在web.py中设置基于异步/回调的url下载机制?资源使用率低是特别重要的,因为每个用户发起的请求可能导致下载多个页面.
流程看起来像:
用户请求 - > web.py - >并行或异步下载10页 - >分析内容,返回结果
我认识到Twisted是一个很好的方法,但我已经在web.py中了,所以我对web.py中的内容特别感兴趣.
这是一段有趣的代码.我自己没有使用它,但它看起来不错;)
https://github.com/facebook/tornado/blob/master/tornado/httpclient.py
低级AsyncHTTPClient:
"使用pycurl支持的非阻塞HTTP客户端.示例用法:"
import ioloop def handle_request(response): if response.error: print "Error:", response.error else: print response.body ioloop.IOLoop.instance().stop() http_client = httpclient.AsyncHTTPClient() http_client.fetch("http://www.google.com/", handle_request) ioloop.IOLoop.instance().start()
"fetch()可以采用字符串URL或HTTPRequest实例,它提供了更多选项,例如执行POST/PUT/DELETE请求.
AsyncHTTPClient构造函数的关键字参数max_clients确定可以在每个IOLoop上并行执行的最大并发fetch()操作数."
还有一个新的实现正在进行中:https: //github.com/facebook/tornado/blob/master/tornado/simple_httpclient.py "没有外部依赖关系的非阻塞HTTP客户端....这个类仍在开发中尚未推荐用于生产用途."