controllable timer with example usage
This commit is contained in:
parent
0dd23f6de0
commit
8f908ac317
4 changed files with 63 additions and 3 deletions
|
|
@ -3,9 +3,46 @@ Router endpoints for the _____ module
|
|||
|
||||
Endpoints:
|
||||
"""
|
||||
from fastapi import APIRouter
|
||||
import threading
|
||||
|
||||
from fastapi import APIRouter, Request, HTTPException
|
||||
|
||||
from src.utils import create_timer
|
||||
|
||||
router = APIRouter(
|
||||
tags=[""],
|
||||
)
|
||||
)
|
||||
|
||||
@router.put("/timer/start")
|
||||
async def start_timer(request: Request, interval: int):
|
||||
def example_timer_target():
|
||||
print("ping")
|
||||
|
||||
stop_event = threading.Event()
|
||||
timer = create_timer(func=example_timer_target, interval=interval, stop_event=stop_event)
|
||||
|
||||
timer_tracker = {
|
||||
"ident": "example_timer",
|
||||
"interval": interval,
|
||||
"stop_event": stop_event,
|
||||
"timer": timer
|
||||
}
|
||||
timer.start()
|
||||
|
||||
request.app.state.timers.append(timer_tracker)
|
||||
|
||||
|
||||
@router.put("/timer/stop")
|
||||
async def stop_timer(request: Request, ident: str):
|
||||
timers = request.app.state.timers
|
||||
print(timers)
|
||||
idx, timer_tracker = next(((i, timer) for i, timer in enumerate(timers) if timer["ident"] == ident), (None, None))
|
||||
|
||||
if not timer_tracker:
|
||||
raise HTTPException(status_code=404, detail="Timer not found")
|
||||
|
||||
timer_tracker["stop_event"].set()
|
||||
timer_tracker["timer"].join()
|
||||
timer_tracker["timer"] = None
|
||||
timers.pop(idx)
|
||||
print(timers)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue