Код на неопределенное время зависает доходя до while
У меня есть функции запуска приложений:
# Запуск 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 шт):
Автор решения: AnnaBazueva
→ Ссылка
Меня смущает архитектура.
Автор вопроса и сам пишет, что задержка когда требуется открывать приложение.
Я думаю здесь требуется асинхронный код.
# Основная асинхронная функция
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.