Исправление 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()