【问题标题】:Asynchronous operation in TornadoTornado 中的异步操作
【发布时间】:2016-02-23 02:09:24
【问题描述】:

我正在尝试了解 Tornado 如何在异步和非阻塞模式下工作。

我只想让我的 RequestHandler 将sum(range(10000000)) 的结果写回客户端。

我在我的 RequestHandler 中尝试过这种方式:

@tornado.gen.coroutine
def post(self, *args, **kwargs):
    res = yield tornado.gen.Task(self._sum, 10000000)

    self.write("Result: %d" % res)
    self.finish()

def _sum(self, size, callback):
    callback(sum(range(size)))

我正在使用 apache2 基准测试工具对我的 Tornado 进行测试,其中包含 100 个请求,其中 50 个是并发的。

问题是我得到了与以下代码相同的时间(整个测试大约 15 秒):

def post(self, *args, **kwargs):
    res = sum(range(10000000))
    self.write("Result: %d" % res)

我不明白我在哪里做错了。

提前谢谢你

【问题讨论】:

    标签: asynchronous tornado coroutine


    【解决方案1】:

    Tornado 并未针对并发计算进行优化——事实上,标准 Python 解释器本身无法在单个进程中进行并发计算。 Tornado 经过优化,可以同时执行异步网络操作。您的测试是计算密集型的,因此您正确地发现,围绕计算执行“yield”没有任何好处。

    【讨论】:

    • 嗨 A. Jesse Jiryu Davis!非常感谢您的重播,我明白了。
    猜你喜欢
    • 1970-01-01
    • 2018-04-11
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    相关资源
    最近更新 更多