Подключайтесь и обрабатывайте несколько сырых сокетов одновременно в Python 2.x
Я новичок в Python, и пытаюсь изучить его "на работе". И я обязан это сделать.
Я обязан общаться с 3 серверами с необработанным сокетом. Я могу легко сделать это последовательно. Но мне было интересно, есть ли способ, которым я могу общаться с этими 3 серверами одновременно? Все 3 сервера имеют разные IP-адреса.
В основном попробуйте сделать следующее, но в 1 шаг:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST1, PORT1))
s.connect((HOST2, PORT1))
s.connect((HOST3, PORT1))
что тоже нужно позже s.sendall()
& s.recv()
быть распараллеленным.
4 ответа
Этот ответ с использованием потоков действительно сработал для меня.
Если у вас есть только один поток прослушивания, вы можете использовать команду select для ожидания нескольких сокетов и проснуться, когда любой из них вернет данные:
Трудно прописать множество знаний, не зная дополнительной информации о протоколе вашего сервера, о том, что вы слушаете и что вы собираетесь с ним делать, и т. Д., Но я могу представить, если не будет никакой дополнительной информации, сценарий, в котором связь обрабатывается мультипроцессором. Пул (3), где каждый член пула сопоставляется с IP-адресом, и где все три отправляют данные в один и тот же мультипроцессинг.Queue (), который оценивается потоком цикла.
Какие-нибудь дополнительные детали?
Желаем удачи на работе!
Взгляните на модуль asyncio.
Он требует Python 3, но позволяет писать однопоточные приложения с несколькими контекстами выполнения - разновидность совместной многопоточности, где контекст переключается только тогда, когда пользователь говорит об этом. Вы действительно получаете лучшее из потока и параллелизма на основе событий.