
现在有一个简单的脚本,但是其中有几个操作(发送 HTTP 请求并等待响应)比较耗时,有办法用 Tornado 的异步做嘛?如果有的话,应该如何做(之前看的使用异步的例子,都是把 Tornado 作为 web 服务器,现在我只想在脚本里用)?还是应该用 gevent ?或者 Celery ?
1 yxcxx 2019-10-31 16:46:51 +08:00 asyncio 不香吗 |
3 renmu 2019-10-31 16:50:56 +08:00 via Android grequests |
4 locoz 2019-10-31 17:12:02 +08:00 我记得 Tornado 的官方文档里有个样例,就是用 Tornado 的 HTTP Client 做了个简单的爬虫,你要不看看? |
5 justfly 2019-10-31 17:21:44 +08:00 让 io loop run 起来,你的异步逻辑是跑在 io loop 里面的。 |
6 ifoolish 2019-10-31 19:23:18 +08:00 from tornado.ioloop import IOLoop from tornado.httpclient import AsyncHTTPClient from tornado.gen import coroutine, Return @coroutine def get_data(): ____http_client = AsyncHTTPClient() ____rsp = yield http_client.fetch( ________'http://httpbin.org/ip', ________method='GET' ____) ____body = rsp.body ____raise Return(body) if __name__ == "__main__": ____loop = IOLoop.current() ____result = loop.run_sync(get_data) ____print result |
7 ifoolish 2019-10-31 19:24:33 +08:00 前面的空格我替换成了下划线,将就着看吧 |
11 iPhoneXI 2019-10-31 20:03:40 +08:00 via Android 其实没必要 用进程池 /线程池 concurrent.futures |