сервер tornado websocket - очередь подключений - PullRequest
0 голосов
/ 13 июля 2020

У меня tornado.websocket.WebSocketHandler обрабатывает данные. Идея состоит в том, чтобы создать ограниченное количество обработчиков (например, чтобы они были ограничены количеством ядер ЦП). Я хотел бы поставить остальные соединения в очередь (как только они открываются), чтобы одно из них активировалось, когда заканчивается другое.

Я пытался сделать это через threading.Semaphore, но он кажется, что обработчики сокетов торнадо работают в одном потоке, так что все зависает. Как я могу этого добиться?

1 Ответ

1 голос
/ 13 июля 2020

Tornado имеет собственный класс асинхронных семафоров в tornado.locks.Semaphore.

Tornado разработан для очень дешевых подключений - одно подключение на ядро ​​было бы чрезвычайно низким пределом. Я предлагаю не ограничивать количество подключений как таковых, а ограничивать то, что вы делаете с этими подключениями. (и помните GIL - если вы не вызываете расширения C для работы с интенсивным использованием ЦП, вы все равно не можете использовать несколько ядер ЦП из python). Выполнение вашей ресурсоемкой работы с ограниченным ThreadPoolExecutor может быть лучшим способом сделать то, что, похоже, вы пытаетесь сделать.

...