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

I have a Python Flask server that uses HTTPS. When I press CTRL-C to terminate, the listner is still running (I have to run in the shell: sudo fuser 8080/tcp -k to kill it). I want a better way of releasing it. Anyone know the correct Flask code to use?

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("/")

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, Raspberry Pi running Raspbian

解决方案

I exactly had the same problem with bottle, finally I ended up monkey-patching the socket module itself. Add this after your imports:

# 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

I didn't find any other way.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值