Я пытаюсь написать сетевую игру с Pygame и asyncio, но я не могу понять, как избежать зависания при чтении. Вот мой код клиента:Неблокирующий ввод-вывод с asyncio
@asyncio.coroutine
def handle_client():
print("Connected!")
reader, writer = yield from asyncio.open_connection('localhost', 8000)
while True:
mouse_up = False
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONUP:
mouse_up = True
if mouse_up:
print("Writing")
writer.write(b"Mouse up")
print("Waiting to read")
line = yield from reader.read(2**12)
print(line.decode())
writer.close()
Это висит на линии line = yield from reader.read(2**12)
. Ранее я думал, что точкой асинчо было то, что он был неблокирующим, и поэтому, если бы не было никаких данных для чтения, это просто продолжало бы выполнение. Теперь я вижу, что это не так.
Как интегрировать сетевой код asyncio с чертежом и кодом события Pygame?
Спасибо. Я бы поместил вызов 'clock.tick()' в обычное место в цикле или мне нужно было написать собственный асинхронный код, чтобы избежать блокировки сетевого кода? – rlms
@sweeneyrod: последний. Вызов 'sleep()' выше эмулирует async 'tick()' – jfs
Не будет ли причиной вызова кода pygame (цикл события и сон) для каждого клиента, а не только один раз? – rlms