我正在尝试使用 Pygame 和 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 的意义在于它是非阻塞的,因此如果没有任何数据要读取,它就会继续执行。我现在看到情况并非如此。
如何将 asyncio 网络代码与 Pygame 绘图和事件代码集成?