私のaiohttpサーバーの展開オプションで完全に失われました。本番環境でサービスを移動するには複数の方法があり、正しい方法を選択できません。
- systemd script/supervisord + api hour 短所: api hour の仕組みがわかりません。サーバーのデーモン コルーチンを制御しているように見えますが、私のサーバーの coro は asyncio.gather 関数で実行されます (低レベルの aiohttp サーバー/接続ハンドラー)。他のコロ (スーパーバイザー/ステートキーパーのクラス永久実行メソッド) と、API 時間で 2 番目のコルーチンを処理するのに問題がある可能性があります
- ガンコーン同じだけど1のように
- nginx + unix ソケット +systemd スクリプト 短所: デプロイとサポートが非常に難しいように見えます。
- systemd スクリプトの下の純粋な aiohttp サーバー: 短所: pid ファイルの処理、低パフォーマンス (?)
私の実行機能は次のようになります。
def run():
startTime = time.time()
logging.basicConfig(level=logging.INFO, format="%(asctime)s [ %(levelname)s ]: %(message)s")
cfg = ConfigStore("server_config.cfg")
loop = asyncio.get_event_loop()
logging.info("Starting server")
db = DBProxyLayer.fabric(cfg("dbCredentials"))
logging.info("DBLayer initialized {}".format(db))
try:
supervisor = QPSServerSupervisor(loop=loop, db=db, config=cfg)
srvCoro = loop.create_server(lambda: QPSServer(
supervisor=supervisor, debug=False, keep_alive_on=False, loop=loop),
host=cfg("command_host"), port=cfg("command_port"))
loop.run_until_complete(asyncio.gather(*(srvCoro, supervisor.startToServe())))
except Exception as e:
logging.critical("Server start failure {}\n{}".format(e, traceback.print_exc()))
sys.exit(-1)
else:
logging.info("Server started for {0:.2f} seconds".format(time.time()-startTime))
try:
loop.run_forever()
except Exception as e:
logging.info(e)
loop.close()
sys.exit(-1)