Временное ограничение цикла

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

guard_placeholder = None
while guard_placeholder is None:
    guard_placeholder = pyautogui.locateCenterOnScreen('images/.....png', confidence=0.8)

Как мне ограничить по времени: допустим если нет объекта 60сек, прервать цикл (работу скрипта)


Ответы (1 шт):

Автор решения: Inventor

Асинхронный вариант решения задачи. Пока ваш блок загружается вы можете делать что-то ещё =)

# python3.7 но можно адаптировать и под более рание версии

import asyncio
from time import time

async def show_block(wait_time, interval):
    # wait_time указывает сколько нужно ждать изменения переменной в секундах
    # interval - показывает раз в сколько секунд проверять значение перменной. 0 - следить без остановки. Значеие в секундах

    # Переменная за которой нужно следить
    global guard_placeholder
    start_time = time()

    while start_time + 60 < time():
        if guard_placeholder:
            return 'success'

        await asyncio.sleep(interval)

    return 'fail'


block_showed = asyncio.run(show_block(60, 0.1))

if block_showed == 'success':
    print('Блок показан!')
else:
    print('Что-то пошло не так, блок не был отображён')
→ Ссылка