我目前有一个程序结构如下:

set_up_everthing()

while True:
    if new_client_ready():
        connect_new_client()

    for client in clients:
        if client.is_ready():
            get_input_from(client)

    update_program_state_based_on_input()

    for client in clients:
        if client.is_ready():
            send_output_to(client)

clean_up()

网络 I/O 目前使用套接字和选择,但我想重写它以使用 asyncio 库。我想我明白如何制作一个简单的 asyncio 程序,这个想法似乎是当你想做一些 I/O 时,你 yield from 一个函数来完成它,所以当主循环获得一个新客户端时,它会执行 yield from accept_client() ,当该客户端收到信息时,它会执行 yield from read_information() ,依此类推。但是,我不知道如何将它与程序的其他部分结合起来。

最佳答案

您的代码片段粗略地描述了 asyncio 本身的工作方式。

请查看 asyncio example 以了解如何 使用 asyncio:

import asyncio

@asyncio.coroutine
def echo_server():
    yield from asyncio.start_server(handle_connection, 'localhost', 8000)

@asyncio.coroutine
def handle_connection(reader, writer):
    while True:
        data = yield from reader.read(8192)
        if not data:
            break
        writer.write(data)

loop = asyncio.get_event_loop()
loop.run_until_complete(echo_server())
try:
    loop.run_forever()
finally:
    loop.close()

关于python - 使用 asyncio 的程序结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27658108/

10-12 23:04