У меня есть поток, который ожидает ввода сигналов через ZMQ и сетевой ввод-вывод через TCP (и другой делает то же самое с UDP).
socket_tcp = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
socket_tcp.connect( ( self.config.tcp_ip, self.config.tcp_port ) )
while True:
s_ready = zmq.select( [socket_zmq, socket_tcp], [], [] )[0]
for sock in s_ready:
# do stuff
Однако сокет TCP никогда не возвращается как доступный для записи (я убедился, что он действительно получает данные с помощью Wireshark).
В документации сказано, что я могу пройти
zmq.Socket
или любой объект Python, имеющий методfileno()
, который возвращает допустимый файловый дескриптор.
и я думаю, что последнее верно для socket.socket
.
То же самое и с UDP.
Я что-то упускаю?
Нужно ли обрабатывать сокет ZMQ в отдельном потоке и передавать его сообщения с помощью ctrl_rcv, ctrl_snd = multiprocessing.Pipe()
?
Или я могу использовать select
в обоих мирах, как я и ожидал?