独角兽(uvicorn)。 运行 以编程方式还是通过命令行?

gunicorn (uvicorn). run programatically or via command line?

如果我在生产环境中以编程方式或通过命令行 运行 uvicorn (gunicorn) 有什么不同吗?

命令行:

uvicorn --host ${HOST} --port ${PORT} --workers ${NUM_OF_WORKERS} --log-config ${FILE_PATH}

以编程方式

uvicorn.run(
  'main:app', host=host, port=port, reload=False,
  workers=workers_num, log_config=log_config
)
python main.py

我会根据@Klaus D.

的提示尝试自己回答

uvicorn可执行文件为:

#!/usr/local/bin/python3.8
# -*- coding: utf-8 -*-
import re
import sys
from uvicorn.main import main
if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

其中 main() 是:

def main(
  ...
  many_arguments_here
  ...
) -> None:
  sys.path.insert(0, app_dir)
  run(app, **kwargs)

所以,如果我们 运行 uvicorn 以编程方式喜欢

if __name__ == '__main__':
  import sys

  # app_dir default value if nothing set
  app_dir = "."
  sys.path.insert(0, app_dir)
  sys.exit(
    uvicorn.run(
      'main:app', host=host, port=port, reload=False,
      workers=workers_num, log_config=log_config
    )
  )

这与通过命令行 运行 uvicorn 相同