LINUX.ORG.RU

История изменений

Исправление pawnhearts, (текущая версия) :

а стиль програмирования под homeassistant заставляет вкидывать в eventloop таски, не дожидаясь завершения их выполнения..

Почему так? Либо await таски, либо loop.run_until_complete, либо сооруди какую-нибудь очередь.

Либо вот так:

import asyncio

async def send_transaction(reader, writer, lock):

    
    async with lock:
        writer.write('aa\n'.encode('utf-8'))
        buf = await reader.readline()
        print(buf)


async def main(loop):
    print('Starting main')
    reader, writer = await asyncio.open_connection('127.0.0.1', 3000, loop=loop)
    lock = asyncio.Lock()
    tasks = []
    for i in range(3):
        tasks.append(asyncio.create_task(send_transaction(reader, writer, lock)))
    results = await asyncio.gather(*tasks)
    print('>DONE')

if __name__ == '__main__':
    event_loop = asyncio.get_event_loop()
    try:
        event_loop.run_until_complete(main(event_loop))
    finally:
        event_loop.close()

Исходная версия pawnhearts, :

а стиль програмирования под homeassistant заставляет вкидывать в eventloop таски, не дожидаясь завершения их выполнения..

Почему так? Либо await таски, либо loop.run_until_complete, либо сооруди какую-нибудь очередь.

Либо вот так:

import asyncio

async def send_transaction(reader, writer, lock):

    writer.write('aa\n'.encode('utf-8'))
    async with lock:
        buf = await reader.readline()
        print(buf)


async def main(loop):
    print('Starting main')
    reader, writer = await asyncio.open_connection('127.0.0.1', 3000, loop=loop)
    lock = asyncio.Lock()
    tasks = []
    for i in range(3):
        tasks.append(asyncio.create_task(send_transaction(reader, writer, lock)))
    results = await asyncio.gather(*tasks)
    print('>DONE')

if __name__ == '__main__':
    event_loop = asyncio.get_event_loop()
    try:
        event_loop.run_until_complete(main(event_loop))
    finally:
        event_loop.close()