Я должен проверить некоторые условия, которые, когда он становится истинным, мне нужно запустить функцию на Flask серверном приложении. Например, в следующем коде мне нужно начать запись с камеры, чтобы сохранять файлы на локальный диск при доступе к маршруту моей камеры. Следующий код работает, но я не уверен, что это лучший способ сделать это или есть более эффективный способ.
import neceassary packages
app = Flask(__name__)
vs = VideoStream(src=0).start()
time.sleep(2.0)
@app.route("/")
def index():
global idx, cams
idx = True
cams = False
return render_template('index.html')
@app.route('/camera')
def cam():
global idx, cams
idx = False
cams = True
return render_template('camera.html')
####Fuction for generating live video feed
@app.route("/video_feed")
def video_feed():
# return the response generated along with the specific media
# type (mime type)
return Response(generate(),
mimetype = "multipart/x-mixed-replace; boundary=frame")
def listener():
## This function starts writing the video feed through cv2.VideoWriter, all defined in ClipWriter class
cw = ClipWriter()
while True:
fr = vs.read()
if cams and not idx:
print("Rec")
if not cw.recording:
timestamp = datetime.datetime.now()
path = "{}/{}.avi".format("vids/", timestamp.strftime("%Y%m%d-%H%M%S"))
cw.start(path, cv2.VideoWriter_fourcc(*"MJPG"), 30)
cw.update(fr)
if idx and not cams and cw.recording:
print("Rec Stop" + " " + path)
cw.finish()
if __name__ == '__main__':
t2 = threading.Thread(target=listener)
t2.daemon = True
t2.start()
app.run(host=args["ip"], port=args["port"], debug=True,
threaded=True, use_reloader=False)
vs.stop()
Теперь сцена состоит в том, что моя функция записи работает в отдельном и только проверяет условие для флаговых переменных cams
и idx
, являющихся истинными, для запуска функций из ClipWriter
класса.
В общем, мне нужен эффективный способ, чтобы проверить условия (которые могут быть события, происходящие на любой странице на моем сервере), чтобы запустить мои функции. Я просто попытался сделать своего рода даже слушателя в моей функции слушателя, используя While True:
, чтобы проверить, что условие выполнено, и выполнить функции в зависимости от определенных событий, происходящих на моих разных страницах или при доступе к новым страницам, а не обязательно все события могут происходить через действия пользователя. Учитывая, что я вообще не использую Javascript, есть ли эффективный способ сделать слушатель событий , который поможет мне избавиться от While True
?