刚刚在看tornado的gen模块http://www.tornadoweb.org/documentati...
class AsyncHandler(RequestHandler):
@asynchronous
def get(self):
http_client = AsyncHTTPClient()
http_client.fetch("http://example.com",
callback=self.on_fetch)
def on_fetch(self, response):
do_something_with_response(response)
self.render("template.html")可以用gen模块优化成
class GenAsyncHandler(RequestHandler):
@asynchronous
@gen.engine
def get(self):
http_client = AsyncHTTPClient()
response = yield gen.Task(http_client.fetch, "http://example.com")
do_something_with_response(response)
self.render("template.html")ok, 现在书抄完了, 开始提问
我使用 tornado.httpclient.HTTPClient
http_client = httpclient.HTTPClient()
try:
response = http_client.fetch("http://www.google.com/")
print response.body
except httpclient.HTTPError, e:
print "Error:", e也可以实现同步的代码风格, 实际上应该也是异步执行, 因为用到了IOLoop
我的问题是
1. tornado.httpclient.HTTPClient 用在生产环境有问题嘛?
2. 两种写法达到的效果是不是一样的, 如果不一样, 有什么区别?
http_client = AsyncHTTPClient()
这个是异步非阻塞的 http_client, 这种方法需要提供 callback ,或用 gen 修饰
http_client = httpclient.HTTPClient()
这个同步阻塞的 http_client, 这个完全就是同步的。。。
参见 http://www.tornadoweb.org/documentati...
答案:
1、用在生产环境完全没问题,前提是你不在乎是不是阻塞的。
2、两种方法,一个是阻塞一个是非阻塞。