Асинхронное выполнение функции с помощью asyncio
def parse_and_send_message(message):
pass
x = threading.Thread(target=parse_and_send_message, args=("HELLO!"))
x.start()
Как перевести данный код с использованием asyncio ?
Сама функция parse_and_send_message ничего не должна возвращать, внутри обработчик, который нужно выполнить в отдельном потоке, тк процесс занимает несколько секунд.
Ответы (1 шт):
Автор решения: vadim vaduxa
→ Ссылка
import threading, asyncio, random, time
def print2(message, n, sleep=False):
if sleep: time.sleep(random.randint(50, 90) / 100)
print(f'{n} {message} {threading.current_thread()}')
async def msg(message, n):
for nn in range(n):
await asyncio.sleep(random.randint(1, 30)/100)
print2(message, nn, sleep=False)
async def main(n):
await asyncio.gather(msg("HELLO-A", n), msg("HELLO-B", n),)
if __name__ == '__main__':
for nn in range(10):
threading.Thread(target=print2, args=["HELLO-T", nn], kwargs=dict(sleep=True)).start()
asyncio.run(main(10))
out:
0 HELLO-A <_MainThread(MainThread, started 12400)>
1 HELLO-A <_MainThread(MainThread, started 12400)>
2 HELLO-A <_MainThread(MainThread, started 12400)>
0 HELLO-B <_MainThread(MainThread, started 12400)>
8 HELLO-T <Thread(Thread-9, started 5260)>
3 HELLO-A <_MainThread(MainThread, started 12400)>
0 HELLO-T <Thread(Thread-1, started 16608)>
3 HELLO-T <Thread(Thread-4, started 14520)>
5 HELLO-T <Thread(Thread-6, started 4452)>
2 HELLO-T <Thread(Thread-3, started 14544)>
9 HELLO-T <Thread(Thread-10, started 10820)>
1 HELLO-B <_MainThread(MainThread, started 12400)>
...