Das Szenario: Ich hab ne API laufen die per post request einen Service starten und stoppen soll. Der Service soll alle paar Sekunden etwas tun.
Code:
from fastapi import FastAPI
from testService import Service
import time
app = FastAPI()
@app.get("/")
def index():
#hier später Service start / stop callen (und post draus machen)
return { "message": "hello world"}
service = Service()
service.start()
time.sleep(20)
service.stop()
Und der service:
import sched, time
class Service:
scheduler = sched.scheduler(time.time, time.sleep)
running = False
interval = 5
def start(self):
self.running = True
self.task(None)
self.scheduler.run()
def stop(self):
self.running = False
if(self.event):
self.scheduler.cancel(self.event)
def task(self, nothing):
if(self.running):
self.event = self.scheduler.enter(self.interval, 1, self.task, (self,))
print("test")
#hier dann der Code, der alle paar Sekunden ausgeführt werden soll
Das Problem: self.scheduler.run() blockt den Main Thread, und die Lösung ist wohl ne Schleife darum, aber das sieht irgendwie nach dem falschen Ansatz aus und ich weiß nicht ob das sich nicht vlt mit den API Endpoints beißt...
Wie mache ich das richtig?