python - 脚本终止时释放 Python Flask 端口

标签 python flask

我有一个使用 HTTPS 的 Python Flask 服务器。当我按 CTRL-C 终止时,监听器仍在运行(我必须在 shell 中运行:sudo fuser 8080/tcp -k 来终止它)。我想要一种更好的释放方式。有人知道要使用的正确 Flask 代码吗?

import sys
import os
import signal
from flask import Flask, render_template, url_for, current_app, request
from OpenSSL import SSL

# Clean-up when press CTRL+C
def signal_handler(signal, frame):
        # I want to release the port here
        print('Clean-up')
        sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)

context = SSL.Context(SSL.SSLv23_METHOD)
context.use_privatekey_file('server.key')
context.use_certificate_file('server.crt')

app = Flask(__name__)

@app.route("/<arg1>")
def route1(arg1):
    return render_template("flask_page1.html", var1=arg1)

app.run(host="0.0.0.0", port=8080, debug=False, ssl_context=context)

Python 2.7,运行 Raspbian 的 Raspberry Pi

最佳答案

我在 bottle 上遇到了同样的问题,最后我对 socket 模块本身进行了猴子修补。在导入后添加:

# patch socket module
socket.socket._bind = socket.socket.bind
def my_socket_bind(self, *args, **kwargs):
    self.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    return socket.socket._bind(self, *args, **kwargs)
socket.socket.bind = my_socket_bind

我没有找到任何其他方法。

关于python - 脚本终止时释放 Python Flask 端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25535975/

相关文章:

python - 导入 flask.ext.wtf

python - 从 Windows PowerShell 启动 Python

python - 如何处理激活环境时的错误?

python - 验证用户输入的文件名

python - Gunicorn --reload 不适用于具有本地存储库的 Ubuntu

javascript - 将 Flask 变量传递到 Javascript

python - 如何在 Flask 中缓存大型机器学习模型?

python - _ZSt28__throw_bad_array_new_lengthv 尝试在编译共享对象后在 Python 中导入 C++ 代码

Python TensorFlow 值错误 : Shape must be rank 1 but is rank 0

python - 我的 Flask 容器和 Ganache 容器之间没有连接