python - Run function on Flask server every x seconds to update Redis cache without clients making separate calls -


i have flask app makes call s3 external api following structure before rendering data in javascript:

from flask import flask, render_template,make_response flask import request import requests import requests_cache  import redis boto3.session import session import json  app = flask(__name__)  @app.route('/test') def test1():     bucket_root = 'testbucket'      session = session(         aws_access_key_id='s3_key',         aws_secret_access_key='s3_secret_key')     s3 = session.resource('s3')      bucket = s3.bucket(bucket_root)      testvalues = json.dumps(s3.object(bucket_root,'all1.json').get()['body'].read())      r = requests.get(api_link)      return render_template('test_html.html',json_s3_test_response=r.content,                         limit=limit, testvalues=testvalues)  @app.route('/test2') def test2():     bucket_root = 'testbucket'      session = session(         aws_access_key_id='s3_key',         aws_secret_access_key='s3_secret_key')     s3 = session.resource('s3')      bucket = s3.bucket(bucket_root)      testvalues = json.dumps(s3.object(bucket_root,'all2.json').get()['body'].read())      r = requests.get(api_link)      return render_template('test_html.html',json_s3_test_response=r.content,                         limit=limit, testvalues=testvalues)  @app.errorhandler(500) def internal_error(error):     return "500 error"  @app.errorhandler(404) def not_found(error):     return "404 error",404  @app.errorhandler(400) def custom400(error):     return "400 error",400  //catch all? @app.errorhandler(exception) def all_exception_handler(error):     return 'error', 500 

obviously have lot of inefficiencies here, main question is:

to me seems i'm calling s3 , external api each client, every time refresh page. increases chance app crash due timeouts (and poor error handling) , diminishes performance. resolve periodically caching s3 results (say every 10 mins) local redis server (already set , running) pinging external api once server every few seconds before passing onto clients.

i have code can store data redis every 10 mins in regular python script, however, i'm not sure place within flask server? put it's own function or keep call redis in @app.route()?

thank time , effort. appreciated! i'm new flask of has been confusing.