в моем проекте мне нужно общаться с моим компьютером Windows, поэтому я создал Socket. Мой сервер был разработан на C ++, а мой клиент на Python.
Чтобы общаться и не прерывать мой основной процесс в Python, я немного прослушал процесс, используя многопроцессорный модуль в Python. Но у меня возникли некоторые проблемы, потому что мне нужно, чтобы queues.get и socket.recv () не блокировали.
Для очередей у меня все в порядке, я установил его: queue.get (block = False)
Но у меня проблемы с моим: socket.recv ();
Я попытался установить сокет моего клиента с блокировкой = False с помощью socket.setblocking (), но затем я так и не получил ответ от своего сервера.
Вот моя функция связи с клиентом:
def _main(queue_in, queue_out):
response = b''
config.connection.setblocking(0)
while response != b'exit':
command = queue_in.get(block=False)
config.connection.send(command.encode())
print("Has send")
try:
response = config.connection.recv(256)
print("Wait to receive")
except:
pass
else:
queue_out.put(response.decode())
print("received")
return
А вот функция, с которой я общаюсь с моим клиентом из моего основного Процесса (Да, мой клиент - это подпроцесс):
def _communicate(command):
queue_in.put(command)
time.sleep(.5)
print("Wait for response")
return queue_out.get()
Queue_in - это место, куда я помещаю команды для отправки на мой сервер.
Queue_out - это место, куда я помещаю ответы, полученные от моего сервера.
Мой сервер отправляет обратно команду ввода после каждого действия.
Я ожидал сообщения, подобного этому:
Основной процесс --- "play" ---> Клиентский процесс --- "play" ---> Сервер
Основной процесс <--- "play" --- Клиентский процесс <--- "play --- Сервер </p>
Затем сервер ожидает завершения потока и затем отправляет остановку моему Клиенту:
Концы потоков:
Сервер --- «остановка» ---> Клиентский процесс --- «остановка» ---> Основной процесс
Сервер <--- "выход" --- Клиентский процесс <--- "выход" --- Основной процесс </p>
Спасибо.