Python Asyncio. Скрипт перестаёт выполняться, но не падает с ошибкой

Рейтинг: 0Ответов: 0Опубликовано: 10.03.2023

Есть асинхронный скрипт, который должен выполняться пока его не остановят руками.

if __name__ == '__main__':
    cache_send_data = {}
    while True:
        try:
            last_data = asyncio.get_event_loop().run_until_complete(main(cache_send_data))
            cache_send_data = last_data
            time.sleep(2)
        except Exception as ex:
            print(ex)

Внутри скрипта есть создание и обработка тасков, отправка данных на сервер:

for id in value:
    t = asyncio.create_task(fnc[key](id))
    tasks.append(t)
result = await asyncio.gather(*tasks)

while status != 'Ok':
    async with websockets.connect("адрес_сервера") as websocket:
        await websocket.send(json.dumps(send_data))
        message = await websocket.recv()
        status = json.loads(message).get('Status')

Спустя 3-6 часов скрипт перестаёт отправлять данные на сервер, но при этом не выдаёт никакую ошибку. По сути зависает. Перезапускаешь скрипт и он продолжает работу.

Если поменять get_event_loop().run_until_complete на run():

Task <Task pending name='Task-2' coro=<######e() running at #####.py:172> cb=[gather.._done_callback() at C:\Python311\Lib\asyncio\tasks.py:754]> got Future <Future pending cb=[_chain_future.._call_check_cancel() at C:\Python311\Lib\asyncio\futures.py:387]> attached to a different loop

Подскажите пожалуйста в какую сторону копать и на что обратить внимание.

Ответы

Ответов пока нет.