2014-08-27 148 views
4

我有一個使用HTTPS的Python Flask服務器。當我按CTRL-C終止時,列表程序仍在運行(我必須在shell中運行:sudo fuser 8080/tcp -k來終止它)。我想要一個更好的方式來釋放它。任何人都知道使用正確的Flask代碼?腳本終止時釋放Python 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

回答

3

我正是曾與瓶同樣的問題,我終於結束了猴子修補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 

我沒有找到任何其他方式。

+0

感謝mguijarr,但它沒有爲我工作。這可能是因爲它適用於瓶子而不是瓶子。 – spiderplant0 2014-08-29 13:02:21

+0

您之前是否添加過'import socket'?你收到錯誤信息還是隻是失敗? – mguijarr 2014-08-29 15:20:14

+0

是的,我補充說。我沒有得到任何錯誤。它似乎並沒有工作。 – spiderplant0 2014-08-29 23:54:58