diff --git a/home_stream/app.py b/home_stream/app.py index 69dac75..21acec7 100644 --- a/home_stream/app.py +++ b/home_stream/app.py @@ -148,6 +148,7 @@ def main(): ) parser.add_argument("--host", default="localhost", help="Hostname of the server") parser.add_argument("-p", "--port", type=int, default=8000, help="Port of the server") + parser.add_argument("-w", "--workers", type=int, default=4, help="Gunicorn webserver workers") parser.add_argument( "-vv", "--debug", @@ -162,7 +163,9 @@ def main(): app = create_app(config_path=os.path.abspath(args.config_file)) app.run(debug=args.debug, host=args.host, port=args.port) else: - serve_via_gunicorn(config_file=args.config_file) + serve_via_gunicorn( + config_file=args.config_file, host=args.host, port=args.port, workers=args.workers + ) if __name__ == "__main__": diff --git a/home_stream/helpers.py b/home_stream/helpers.py index 5bc1986..9330e5f 100644 --- a/home_stream/helpers.py +++ b/home_stream/helpers.py @@ -7,11 +7,12 @@ import hashlib import hmac import os -import subprocess +import sys import yaml from bcrypt import checkpw from flask import Flask, abort, current_app, request +from gunicorn.app.wsgiapp import WSGIApplication def load_config(app: Flask, filename: str) -> None: @@ -71,16 +72,14 @@ def get_stream_token(username: str) -> str: return hmac.new(secret.encode(), username.encode(), hashlib.sha256).hexdigest()[:16] -def serve_via_gunicorn(config_file: str) -> None: - """Serve the application using Gunicorn.""" - subprocess.run( - [ - "gunicorn", - "-w", - "4", - "-b", - "0.0.0.0:8000", - f"home_stream.wsgi:create_app('{config_file}')", - ], - check=True, - ) +def serve_via_gunicorn(config_file: str, host: str, port: int, workers: int) -> None: + """Serve the application using Gunicorn programmatically.""" + sys.argv = [ + "gunicorn", + "-w", + str(workers), + "-b", + f"{host}:{port}", + f"home_stream.wsgi:create_app('{config_file}')", + ] + WSGIApplication().run()