Я получаю сообщение об ошибке не могу вызвать recv (), в то время как другая сопрограмма уже ждет следующего сообщения - PullRequest
0 голосов
/ 23 декабря 2018

Когда я запускаю свою функцию paddleLogic дважды, я получаю сообщение об ошибке "не могу вызвать recv (), пока другая сопрограмма уже ожидает следующего сообщения", хотя я использую await, чтобы убедиться, что они не пытаются получить одновременно.

Я запустил код, не вызывая функцию paddleLogic во второй раз, и все работает, как и ожидалось

    leftPaddlePos = await paddleLogic(websocket,leftPaddlePos)
    rightPaddlePos = await paddleLogic(opponent[websocket],rightPaddlePos)

async def paddleLogic(socket,pos):
        try:
            key = await asyncio.wait_for(socket.recv(),timeout=0.01)
            if key == "1" and pos > 0:
                pos = pos - 1
            elif key == "2" and pos < 60:
                pos = pos + 1
            time.sleep(0.003)
        except asyncio.TimeoutError:
            pos = pos
        return pos

Извините, если этот пост - беспорядок, это мой первый раззадать вопрос по stackoverflow.Если вам нужна дополнительная информация / код, я с радостью ее предоставлю.

1 Ответ

0 голосов
/ 23 декабря 2018

Где вы берете свои розетки?

Что у нас есть сопрограммы.Они запланированы ими, передавая контроль друг другу.Они уступают контроль, когда они звонят await.Похоже, что ваш socket.recv также делает некоторое ожидание за кулисами, передавая управление, поэтому recv вводится дважды, если данные из сети не доступны сразу.

Полагаю, вам будет лучше доступ к поддержке сокетов цикла событий asyncio .В противном случае я бы использовал select() для параллельного просмотра обоих сокетов, возвращал события типа ('left paddle', -1) из моего асинхронного генератора и соответственно обновлял игровой мир.

(могудаже предположим, что игру в реальном времени, такую ​​как понг, было бы проще реализовать полностью синхронным способом с частотой кадров.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...