Выполнение корутины в фоновом режиме

Как сделать так, чтобы корутина выполнялась в фоне, и не задерживала код?

import socket
import asyncio


async def test():
    print("hi")
    await asyncio.sleep(2)
    print("bye")


async def main():
    with socket.create_server(("localhost", 6666)) as server:
        loop = asyncio.get_event_loop()

        while True:
            client, _ = await loop.sock_accept(server)
            mess = await loop.sock_recv(client, 1024)
            print(mess.decode())
            client.close()
            
            asyncio.create_task(test())

if __name__ == '__main__':
    asyncio.run(main())

Есть вот такой небольшой тестовый скрипт, тут две функции... Использую socket.

Я хочу чтобы asyncio.create_task(test()) выполнилась и не задерживала код. То есть сделала как бы "новый поток" в стиле asyncio и там эта задача выполнилась. Только как это сделать - не знаю...


Ответы (1 шт):

Автор решения: homus32

ну и по классике жизни, сам написал - сам ответил....


import socket
import asyncio


async def test():
    print("hi")
    await asyncio.sleep(2)
    print("bye")


async def main():
    with socket.create_server(("localhost", 6666)) as server:
        loop = asyncio.get_event_loop()
        server.setblocking(False)

        while True:
            client, _ = await loop.sock_accept(server)
            mess = await loop.sock_recv(client, 1024)
            print(mess.decode())
            client.close()

            asyncio.create_task(test())

if __name__ == '__main__':
    asyncio.run(main())

все дело в server.setblocking(False) и тогда будет работать как надо (по крайней мере как я хочу)

→ Ссылка