Files
fastwsgi/fastwsgi.py
James Roberts b0b13426d3 Minor fixes
2021-12-19 14:58:23 +02:00

73 lines
1.9 KiB
Python

import os
import sys
import signal
import importlib
import _fastwsgi
NUM_WORKERS = 4
HOST = "0.0.0.0"
PORT = 5000
BACKLOG = 1024
LOGGING = 0
def run_multi_process_server(app):
workers = []
for _ in range(NUM_WORKERS):
pid = os.fork()
if pid > 0:
workers.append(pid)
print(f"Worker process added with PID: {pid}")
else:
try:
_fastwsgi.run_server(app, HOST, PORT, BACKLOG, 0)
except KeyboardInterrupt:
exit()
try:
for _ in range(NUM_WORKERS):
os.wait()
except KeyboardInterrupt:
print("\nStopping all workers")
for worker in workers:
os.kill(worker, signal.SIGINT)
def import_from_string(import_str):
module_str, _, attrs_str = import_str.partition(":")
if not module_str or not attrs_str:
raise ImportError("Import string should be in the format <module>:<attribute>")
try:
module = importlib.import_module(module_str)
for attr_str in attrs_str.split("."):
module = getattr(module, attr_str)
except AttributeError:
raise ImportError(f'Attribute "{attrs_str}" not found in module "{module_str}"')
return module
def print_server_details(host, port):
print(f"\n==== FastWSGI ==== ")
print(f"Host: {host}\nPort: {port}")
print("==================\n")
def run_from_cli():
if len(sys.argv[1:]) < 1:
raise ValueError("No import string provided")
sys.path.insert(0, ".")
wsgi_app = import_from_string(sys.argv[1])
print_server_details(HOST, PORT)
print(f"Server listening at http://{HOST}:{PORT}")
_fastwsgi.run_server(wsgi_app, "", PORT, BACKLOG, LOGGING)
def run(wsgi_app, host=HOST, port=PORT, backlog=1024):
print_server_details(host, port)
print(f"Server listening at http://{host}:{port}")
_fastwsgi.run_server(wsgi_app, host, port, backlog, LOGGING)
# run_multi_process_server(wsgi_app)