|
| 1 | +#!/usr/bin/env python |
| 2 | +import os |
| 3 | +import sys |
| 4 | +import fastapi |
| 5 | + |
| 6 | +from app import app |
| 7 | + |
| 8 | +if __name__ == "__main__": |
| 9 | + import optparse |
| 10 | + import multiprocessing |
| 11 | + import logging |
| 12 | + |
| 13 | + parser = optparse.OptionParser("usage: %prog [options]", add_help_option=False) |
| 14 | + parser.add_option("-h", "--host", dest="host", default='0.0.0.0', type="string") |
| 15 | + parser.add_option("-p", "--port", dest="port", default=8080, type="int") |
| 16 | + parser.add_option("-s", "--server", dest="server", default="", type="string") |
| 17 | + parser.add_option("-w", "--workers", dest="workers", default=0, type="int") |
| 18 | + parser.add_option("-k", "--keepalive", dest="keepalive", default=60, type="int") |
| 19 | + parser.add_option("-v", "--verbose", dest="verbose", default=0, type="int") |
| 20 | + (opt, args) = parser.parse_args() |
| 21 | + |
| 22 | + _is_travis = os.environ.get('TRAVIS') == 'true' |
| 23 | + |
| 24 | + workers = opt.workers |
| 25 | + if workers <= 0: |
| 26 | + workers = int(multiprocessing.cpu_count()) |
| 27 | + |
| 28 | + if _is_travis: |
| 29 | + workers = 2 |
| 30 | + |
| 31 | + def run_app(): |
| 32 | + if opt.server in [ 'si', 'socketify' ]: |
| 33 | + import socketify |
| 34 | + siapp = socketify.ASGI(app) |
| 35 | + siapp.listen(opt.port, lambda config: logging.info(f"Listening on port http://localhost:{opt.port} now\n")) |
| 36 | + siapp.run() |
| 37 | + return |
| 38 | + |
| 39 | + raise Exception(f'Unknown server name = "{opt.server}"') |
| 40 | + |
| 41 | + def create_fork(): |
| 42 | + n = os.fork() |
| 43 | + # n greater than 0 means parent process |
| 44 | + if not n > 0: |
| 45 | + run_app() |
| 46 | + |
| 47 | + # fork limiting the cpu count - 1 |
| 48 | + for i in range(1, workers): |
| 49 | + create_fork() |
| 50 | + |
| 51 | + run_app() # run app on the main process too :) |
0 commit comments