python - 我如何为我的 Flask 应用程序使用 WSGI?我的应用程序使用线程

标签 python flask uwsgi gunicorn wsgi

我有一个 python 程序。它产生新线程,即 API 服务器。它适用于测试环境。但是我想在生产环境中使用 WSGI(例如 gunicorn)。如果不进行重大更改,我该怎么做?

我想使用 WSGI 的原因有很多,但一个重要的原因是我想设置超时,以便为非常慢的请求终止打开的连接。我面临性能问题。非常慢的请求最终会影响另一个请求。

*文件

├── server.py
└── api.py

*服务器.py

import time
import api

api_server = api.APIServer()
api_server.daemon = True
api_server.start()

while True:
  time.sleep(1)

*api.py

import threading
from flask import Flask

class APIServer(threading.Thread):

  def __init__(self):
    threading.Thread.__init__(self)

  def run(self):
    app = Flask(__name__)

    @app.route('/')
    def index():
      return 'hello'

    app.run(host="127.0.0.1", port=5000, threaded=True)

更新 1

真正的代码在这里。我从这段代码中提取了一些内容。

https://github.com/CounterpartyXCP/counterparty-lib/blob/master/counterpartylib/server.py#L403

vidstige的方法绝对正确。但如果可能的话,我不想改变太多。

最佳答案

对您来说棘手的部分是确保您顺利运行其他线程。我建议分两步进行

  1. 更改线程,以便其他内容在后台线程中启动。
  2. 然后切换到gunicorn,你可以使用post_worker_init server hook启动后台线程。

这里真的不需要你的线程。您可以立即切换到 gunicorn。只需安装 pip install gunicorn 并将应用移出到例如服务器.py。这非常重要。

from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
  return 'hello'

现在您可以在没有线程的情况下运行它,例如 FLASK_APP=server.py flask run。一旦你在这一点上有了它,你就可以切换到生产 WSGI,比如 gunicorn。只需像这样启动它即可。

gunicorn server:app

一旦可以使用 gunicorn 运行,就可以 configure它使用多个线程,甚至进程。如果您的工作受 IO 限制,我建议改用 gevent

🦄

关于python - 我如何为我的 Flask 应用程序使用 WSGI?我的应用程序使用线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50402816/

相关文章:

python - 评论中出现意外标记 '<newline>'

python - 文件名字符串到整数错误

python - 无法访问 Python 的 init.py 文件中的 Kubernetes env var

Python Pipeline 在交叉验证中使用时返回 NaN 分数

python - flask : How to do server side cleanup on session expiration?

nginx - 设置环境变量 - nginx + uWSGI

django - 如何在 Cloud Run 的日志中显示 django 日志记录和错误日志?

linux - 无法以 root 身份运行 uwsgi, "bind(): Permission denied"

python - 在 Django 中安装用户管理系统时如何修复 "no fixtures found"?

python - reportlab SimpleDocTemplate - 设置具有可变行数的表格的固定高度