from flask import Flask, request, jsonify from queue import Queue from threading import Thread import os import time import requests app = Flask(__name__) queue = Queue() API_ENDPOINT = os.environ.get("API_ENDPOINT", "") WORKERS = int(os.environ.get("WORKERS", "1")) def worker(): while True: req = queue.get() if req is None: break # Forward the request to the API endpoint response = requests.request(req['method'], API_ENDPOINT, headers=req['headers'], data=req['data']) req['result'] = response.json() queue.task_done() @app.route('/api', methods=['GET', 'POST']) def handle_request(): headers = {key: value for key, value in request.headers} data = request.get_data() method = request.method # Add the request to the queue req = {'headers': headers, 'data': data, 'method': method, 'result': None} queue.put(req) # Wait until the request has been processed while req['result'] is None: time.sleep(0.1) return jsonify(req['result']), 200 if __name__ == "__main__": # Start the worker threads threads = [] for i in range(WORKERS): t = Thread(target=worker) t.start() threads.append(t) # Start the Flask app app.run(host='0.0.0.0', port=5000) # Stop the worker threads for i in range(WORKERS): queue.put(None) for t in threads: t.join()