pompeii
V2EX  ›  问与答

如何在脚本里使用 Tornado 的异步

  •  
  •   pompeii · Oct 31, 2019 · 2453 views
    This topic created in 2563 days ago, the information mentioned may be changed or developed.

    现在有一个简单的脚本,但是其中有几个操作(发送 HTTP 请求并等待响应)比较耗时,有办法用 Tornado 的异步做嘛?如果有的话,应该如何做(之前看的使用异步的例子,都是把 Tornado 作为 web 服务器,现在我只想在脚本里用)?还是应该用 gevent ?或者 Celery ?

    15 replies  •  2019-11-10 14:24:56 +08:00
    yxcxx
    yxcxx
    Oct 31, 2019
    1
    asyncio 不香吗
    pompeii
    pompeii
    OP
    Oct 31, 2019
    2
    @yxcxx #1 忘记说了,用的 Py2.7,#捂脸
    renmu
    renmu
    Oct 31, 2019 via Android❤️1
    3
    grequests
    locoz
    locoz
    Oct 31, 2019❤️1
    4
    我记得 Tornado 的官方文档里有个样例,就是用 Tornado 的 HTTP Client 做了个简单的爬虫,你要不看看?
    justfly
    justfly
    Oct 31, 2019❤️1
    5
    让 io loop run 起来,你的异步逻辑是跑在 io loop 里面的。
    ifoolish
    ifoolish
    Oct 31, 2019❤️1
    6
    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
    ifoolish
    ifoolish
    Oct 31, 2019
    7
    前面的空格我替换成了下划线,将就着看吧
    pompeii
    pompeii
    OP
    Oct 31, 2019
    8
    @renmu #3
    @locoz #4

    我去研究一下
    pompeii
    pompeii
    OP
    Oct 31, 2019
    9
    @justfly #5 谢谢谢谢,这个信息很有用
    pompeii
    pompeii
    OP
    Oct 31, 2019
    10
    @ifoolish #6 太感谢了,想要的就是这个
    iPhoneXI
    iPhoneXI
    Oct 31, 2019 via Android❤️1
    11
    其实没必要
    用进程池 /线程池
    concurrent.futures
    pompeii
    pompeii
    OP
    Oct 31, 2019
    12
    @iPhoneXI #11 谢谢,我去研究一下
    coroutine
    coroutine
    Nov 10, 2019
    13
    @ifoolish 老哥,9102 年了,有必要把 装饰器 + yield + raise 的写法改为 async await return 了。
    ifoolish
    ifoolish
    Nov 10, 2019 via iPhone❤️1
    14
    @coroutine 看清楚人家楼主说在用 2.7 嘛
    coroutine
    coroutine
    Nov 10, 2019
    15
    @ifoolish 嗷没注意看评论抱歉 =。=
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   899 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 22:18 · PVG 06:18 · LAX 14:18 · JFK 17:18
    ♥ Do have faith in what you're doing.