如何获取龙卷风中ioloop中待处理任务的数量?

How to get the number of pending task in ioloop in tornado?

我正在测试用于 websocket 客户端连接的网关服务器。我目前打开 10000 个客户端连接并向我的网关服务器发送消息,它回显所有消息。 当我键入 'ctrl + c' 来停止进程时,它需要很长时间才能停止,而且堆栈跟踪信息如此之多。所以我想计算循环中待处理任务的数量,并找到一个解决方案来在没有堆栈跟踪信息的情况下更快地停止 ioloop

我在 https://www.tornadoweb.org/en/stable/ioloop.html 中找不到任何关于 ioloop 任务计数的 api,所以我在这里问。

服务器端代码:

def create_application():
    return tornado.web.Application([(r'/', WebSocketHandler)])

if __name__ == '__main__':
    app = create_application()
    app.listen(60017)

客户端代码:

if __name__=='__main__':
    try:
        for i in range(1, 10000):
            wsc = WSClient('ws://127.0.0.1:60017', 'pname_' + str(i))
            wsc.start()
            ws_list.append(wsc)
            print('ws_client pname[%s] started!!!'%('pname_' + str(i)))
        tornado.ioloop.IOLoop.current().add_timeout(time.time() + 1, counting_packs)
        tornado.ioloop.IOLoop.current().start()

    except Exception as e:
        print(str(e))

我希望每秒计算待处理任务的数量... 如果有人能告诉我该怎么做,我将不胜感激。非常感谢!!!

Tornado 目前不提供任何方法来查明有多少任务待处理。

如果您只想在按下 ctrl-c 时抑制堆栈跟踪并尽快退出,您可以 运行 signal.signal(signal.SIGINT, signal.SIG_DFL)。这也意味着您无法捕获 KeyboardInterrupt 并从中恢复。