Живое окно: resume, wait, halt

Отпустить цель, ждать остановки с таймаутом, остановить с подтверждением.

с 0.3.0с 0.5.0

Методы

ЭлементСигнатураДоступен сAPI 3
resumeresume(*, sync=True) -> dict0.3.0sync=False — 0.5.0
waitawait wait(*, timeout) -> dict0.5.0только async
haltawait halt(*, timeout) -> dict0.5.0только async

Изменения API 3 (0.5.0)

resume(sync=False), wait и halt — только async def; таймаут обязателен. В def resume() блокирует до остановки.

Правильно

halt — в finally: таймаут wait цель не останавливает. Поколение (generation) связывает остановку с окном.

@case("HW_WINDOW")
async def window(t):
    await t.reach("idle")
    started = t.resume(sync=False)
    try:
        waited = await t.wait(timeout=0.2)
        t.check("no stop yet", waited["outcome"], "timeout")
    finally:
        stopped = await t.halt(timeout=2)
    t.check("same window", stopped["generation"], started["generation"])
    t.check("memory readable", t.read("counter"), 3)

Не рекомендуется

Пока цель работает, доступ к памяти отклоняется (not_stopped). Без finally таймаут оставит цель работающей.

await t.reach("idle")
t.resume(sync=False)
value = t.read("counter")      # refused: not_stopped
await t.wait(timeout=5)        # no finally/halt: a timeout leaves the target running

Фрагменты показывают отклонённые или нежелательные приёмы, а не рабочий рецепт.

Фрагменты для тела сценария; символы прошивки условные.

← НавигацияВсе группыДанные →