import threading import time import random from flask import Flask from werkzeug.serving import make_server ports = set() test = False class StoppableFlaskServer: def __init__(self, app, port): self.server = make_server('127.0.0.1', port, app) self.thread = threading.Thread(target=self.server.serve_forever) self.thread.daemon = True def start(self): self.thread.start() def stop(self): self.server.shutdown() self.thread.join() # Function to create and run a Flask app on a random port for a random duration def create_flask_app(): app = Flask(__name__) @app.route('/health') def index(): return "OK" port = random.randint(1000, 2000) print(f"Starting Flask app on port {port}") print("ports: " + ", ".join(map(str, ports))) server = StoppableFlaskServer(app, port) ports.add(port) print("ports: " + ", ".join(map(str, ports))) server.start() # Random duration between 10 and 30 seconds duration = random.randint(3, 9) if test: duration = 1000 print(f"Flask app on port {port} will run for {duration} seconds") time.sleep(duration) print(f"Stopping Flask app on port {port}") ports.remove(port) server.stop() # Function to spawn a new Flask app every 5 seconds def spawn_backends(): app = Flask(__name__) @app.route('/backends') def index(): return list(ports) server = StoppableFlaskServer(app, 8080) server.start() while True: threading.Thread(target=create_flask_app).start() time.sleep(2) if __name__ == '__main__': spawn_backends()