我想用Pygame和asyncio編寫一個網絡遊戲,但我無法解決如何避免掛在讀取上。這裏是我的客戶端代碼:asyncio的非阻塞I/O
@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繪圖和事件代碼集成?
謝謝。我會把'clock.tick()'調用放在循環中的通常位置,還是我需要編寫自己的異步調用來避免阻塞網絡代碼? – rlms
@sweeneyrod:後者。上面的'sleep()'調用模擬異步'tick()' – jfs
這不會導致爲每個客戶端調用pygame代碼(事件循環和休眠),而不是隻調用一次嗎? – rlms