Я не могу комментировать разницу в поведении между двумя компьютерами. Это не имеет никакого смысла. Но я могу обратиться к вашему пункту № 2. Программирование в Asyncio требует другого подхода.
Я могу дать только общее представление о том, как может быть структурировано ваше приложение.
Возьмите все, что вы хотели бы, чтобы ваша программа делала, кроме соедините вещи, которые вы описали в своем вопросе. Поместите все эти функции в сопрограмму:
async def all_the_other_stuff():
# your code here
Теперь вы создаете основную функцию примерно так:
async def main():
app = App()
app.connect()
await all_the_other_stuff()
app.disconnect()
В качестве последней строки в скрипте (обычно):
asyncio.run(main())
Одно важное предостережение: для того, чтобы это работало, функция all_the_other_stuff должна содержать одно или несколько ожиданий. В отличие от многопоточности, с asyncio параллелизм кооператив . Как только задача получает контроль, она остается под контролем до следующего ожидания, после чего она сдается, и другие задачи получают шанс на выполнение. Только с одним потоком и одним процессом - так и должно быть; если вы хотите превентивный (в отличие от кооперативного) параллелизма, вы должны использовать потоки или процессы.