Как получить номер отложенного задания в ioloop в торнадо? - PullRequest
0 голосов
/ 08 апреля 2019

Я тестирую сервер шлюза для подключения клиента websocket.В настоящее время я открываю 10000 клиентов для подключения и отправки сообщений на сервер шлюза, и он возвращает все сообщения.Когда я набираю 'ctrl + c', чтобы остановить процесс, требуется много времени, чтобы остановиться, и так много информации о трассировке стека.Поэтому я хочу подсчитать количество отложенных задач в цикле и найти решение, чтобы остановить ioloop быстрее без этой информации о стеке

Я не могу найти API для подсчета задач ioloop в https://www.tornadoweb.org/en/stable/ioloop.html, поэтому я спрашиваю здесь.

Код на стороне сервера:

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 голосов
/ 09 апреля 2019

Торнадо в настоящее время не предлагает какого-либо способа узнать, сколько задач ожидает выполнения.

Если вы просто хотите подавить следы стека, когда вы нажимаете ctrl-c и выходите как можно быстрее, вы можете запустить signal.signal(signal.SIGINT, signal.SIG_DFL). Это также будет означать, что вы не можете поймать KeyboardInterrupt и оправиться от него.

...