现在有一个简单的脚本,但是其中有几个操作(发送 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 1
grequests
|
4
locoz 2019-10-31 17:12:02 +08:00 1
我记得 Tornado 的官方文档里有个样例,就是用 Tornado 的 HTTP Client 做了个简单的爬虫,你要不看看?
|
5
justfly 2019-10-31 17:21:44 +08:00 1
让 io loop run 起来,你的异步逻辑是跑在 io loop 里面的。
|
6
ifoolish 2019-10-31 19:23:18 +08:00 1
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 1
其实没必要
用进程池 /线程池 concurrent.futures |