我正在测试用于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))
我希望每秒计算待处理任务的数量... 如果有人可以告诉我该怎么做,将不胜感激。非常感谢!!!
答案 0 :(得分:0)
龙卷风目前不提供任何方法来找出有多少任务待处理。
如果您只想在按ctrl-c时取消堆栈跟踪并尽快退出,则可以运行signal.signal(signal.SIGINT, signal.SIG_DFL)
。这也意味着您无法捕获KeyboardInterrupt
并无法从中恢复。