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

时间:2019-04-08 04:18:20

标签: tornado python-3.5 ioloop

我正在测试用于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))

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

1 个答案:

答案 0 :(得分:0)

龙卷风目前不提供任何方法来找出有多少任务待处理。

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