Код на неопределенное время зависает доходя до while

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

У меня есть функции запуска приложений:

# Запуск MEmu
def start_memu():
    for proc in psutil.process_iter():
        try:
            if 'memu.exe' in proc.name().lower():
                print('MEmu уже запущен.')
                return True
        except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
            pass

    print('Запуск MEmu...')
    os.startfile(r"labels\1.lnk")
    print('Ожидание запуска машины...')
    time.sleep(25)


# Запуск MicroSIP
def start_microsip():
    for proc in psutil.process_iter():
        try:
            if 'microsip.exe' in proc.name().lower():
                print('MicroSIP уже запущен.')
                return True
        except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
            pass
    print('Запуск MicroSIP')
    subprocess.call(r"start MicroSIP\microsip.exe", shell=True)


# Подключение к MicroSIP и MEmu
def connect_to_devices():
    global app, device
    app = Application(backend="uia").connect(path=r"MicroSIP\microsip.exe")
    client = AdbClient(host="127.0.0.1", port=5037)
    sl = None
    devices = client.devices()
    for de in devices:
        sl = str(de.serial)

    device = client.device(sl)

Далее, в другой функции я их вызываю:

def call():
    memu_counter = 0
    print('Запуск программ')
    start_memu()
    start_microsip()
    connect_to_devices()
    while memu_counter < 81:
        # Ожидает окно входящего звонка MicroSIP
        try:
            print('Ожидание звонка')
            check = app.window().child_window(title="Отклонить", control_type="Button")
            call_window = app.window().Edit2.get_value()
            number = (((call_window.split('@'))[-2]).split())[-1]
        except IndexError:
            time.sleep(1)
            continue
        ТУТ ЕЩЁ много кода, вне except.

Код печатает один раз print('Ожидание звонка') и зависает на какое-то время (около -40-50секунд) и дальше начинается итерация, Ожидание звонка начинает печататься каждую секунду.

Код зависает только в том случае, если одно из двух приложений было закрыто и код его открывает.

Ответы

▲ -1

Меня смущает архитектура.

Автор вопроса и сам пишет, что задержка когда требуется открывать приложение.

Я думаю здесь требуется асинхронный код.

# Основная асинхронная функция
async def main():
    print('Запуск программ')
    await start_memu()
    await start_microsip()
    await connect_to_devices()

    memu_counter = 0
    while memu_counter < 81:
        print('Ожидание звонка')
        await asyncio.sleep(1)  # Это асинхронное ожидание
        try:
            check = await app.window().child_window(title="Отклонить",
                                                    control_type="Button")
            call_window = await app.window().Edit2.get_value()
            number = (((call_window.split('@'))[-2]).split())[-1]
        except IndexError:
            continue
        
        # ТAM ЕЩЁ много кода, вне except.