from flask import Flask, request, g from threading import Thread from queue import Queue import requests import os app = Flask(__name__) # Configurable parameter for number of workers WORKERS = int(os.getenv('WORKERS', 2)) API_ENDPOINT = os.getenv('API_ENDPOINT', 'https://actual-api-endpoint') class Worker(Thread): def __init__(self, queue): Thread.__init__(self) self.queue = queue def run(self): while True: data, callback = self.queue.get() try: response = requests.post(API_ENDPOINT, data=data) callback(response) finally: self.queue.task_done() @app.before_first_request def initialize_workers(): g.queue = Queue() for _ in range(WORKERS): worker = Worker(g.queue) worker.daemon = True worker.start() @app.route('/api', methods=['POST']) def queue_api(): data = request.get_json() def callback(response): return response.content g.queue.put((data, callback)) g.queue.join() return callback if __name__ == '__main__': app.run()