V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
dapengzhao
V2EX  ›  问与答

一个关于 tornado 完成耗时操作返回完成信号的问题

  •  
  •   dapengzhao · 2018-08-14 16:29:17 +08:00 · 1292 次点击
    这是一个创建于 2079 天前的主题,其中的信息可能已经有所发展或是发生改变。
    3 条回复    2018-08-20 14:47:18 +08:00
    111111111111
        1
    111111111111  
       2018-08-14 16:57:06 +08:00 via Android
    贴代码的方式好评


    从你贴的代码来看请求阻塞的,所以如果只是你写的需求来说,在 for 循环下面写一行代码,这行代码执行的时候就是 15 个请求处理完成的时候…

    不过这应该不是你想要问的,我猜是想知道服务端处理 15 个并发请求的耗时,如果这样的话,不需要服务端发信号通知,客户端是自己可以知道的

    首先客户端使用异步 HTTP 客户端,这个 tornado 有提供,然后使用 gen.multi 等待这 15 个请求全部完成
    dapengzhao
        2
    dapengzhao  
    OP
       2018-08-20 14:42:38 +08:00
    @111111111111 抱歉刚看到您的回复,是这样的,我的需求就是想问我该让 15 个阻塞的请求全部完成的时候才往下执行,也就是代码中打印 bbbbb...。 因为我在代码中加了 @tornado.web.asynchronous
    @tornado.gen.coroutine
    @run_on_executor()这几个装饰器所以请求已经变成异步非阻塞的了。所以代码执行情况是执行 text ()函数会马上打印 bbbbb..... 而 tornado 服务端会像开启五个线程一样一次出现 5 个 30 也就是计算结果 10 秒后再出现 5 个,直到全部请求处理完毕。
    dapengzhao
        3
    dapengzhao  
    OP
       2018-08-20 14:47:18 +08:00
    @111111111111 公司的需求是我需要提供一个图片本地化的接口,由于一篇文章可能有许多图片,用户的等待时间就会比较长。过程是用户输入微信文章链接我抓取文章内容并且把本地化之后的文章内容返回给用户。目前的问题就是如果采用异步非阻塞的方式,我不知道该如何控制程序等到 tornado 接口把所有图片本地化之后再返回给用户。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5911 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 06:18 · PVG 14:18 · LAX 23:18 · JFK 02:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.