您好,匿名用户
随意问技术百科期待您的加入

tornado HTTPClient 和 gen 模块的实际区别

0 投票

刚刚在看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. 两种写法达到的效果是不是一样的, 如果不一样, 有什么区别?

用户头像 提问 2012年 12月1日 @ Dionysus 上等兵 (229 威望)
分享到:

1个回答

0 投票

http_client = AsyncHTTPClient()
这个是异步非阻塞的 http_client, 这种方法需要提供 callback ,或用 gen 修饰

http_client = httpclient.HTTPClient()
这个同步阻塞的 http_client, 这个完全就是同步的。。。

参见 http://www.tornadoweb.org/documentati...

答案:
1、用在生产环境完全没问题,前提是你不在乎是不是阻塞的。
2、两种方法,一个是阻塞一个是非阻塞。

用户头像 回复 2012年 12月1日 @ Blitzcrank 上等兵 (358 威望)
提一个问题:

相关问题

+1 投票
1 回复 45 阅读
用户头像 提问 2012年 12月1日 @ Ashe 上等兵 (336 威望)
0 投票
1 回复 30 阅读
用户头像 提问 2013年 12月23日 @ Ares 上等兵 (353 威望)
0 投票
1 回复 51 阅读
用户头像 提问 2012年 12月1日 @ Zyra 上等兵 (289 威望)
0 投票
1 回复 58 阅读
用户头像 提问 2013年 9月12日 @ hadoop 上等兵 (109 威望)
0 投票
1 回复 38 阅读
用户头像 提问 2012年 12月1日 @ Singed 上等兵 (275 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...