Я пытаюсь установить связь с прибором (Newport XPS D) через сокеты.
По сути, мне нужны два экземпляра интерфейса контроллера, поскольку XPS работает только с блокирующими сокетами. Один экземпляр будет использоваться для отправки команды перемещения, другой - для опроса позиции.
Есть кое-что, что я явно не понимаю, как работают потоки с тех пор, как я запускаю программу в двух windows терминалах (один обработка опроса, другой ход) работает нормально, но когда я запускаю оба интерфейса в разных потоках на одном и том же терминале, я получаю ошибку занятого сокета (я проверил, что идентификаторы потоков разные).
чтобы уточнить это код сбоя:
from XPS_unified import LTPXPS
import time
from threading import Thread, Timer
class my_indep_XPS(Thread):
def __init__(self):
super().__init__()
self.this_xps = LTPXPS(xps_version="D")
self.timer = None
self.stopped = False
self.polling = False
.
.
.
def run(self):
print(f"Thread #{self.ident}")
if self.polling:
for _ in range(2 * 60 * 2):
time.sleep(0.5)
print(self.this_xps.get_position("Tx"))
else:
self.move(00)
[...]
if __name__ == "__main__":
xps_pos_th = my_indep_XPS()
xps_pos_th.toggle_polling()
xps_pos_th.start()
xps_mov_th = my_indep_XPS()
time.sleep(5)
print("move start")
xps_mov_th.start()