Flask POST 路由变得无响应
Flask POST route becoming unresponsive
我刚刚第一次接触 Flask 并尝试使用它来创建一个 API,它具有 GET、POST 和 DELETE 路由来管理 URL 黑名单。
一段时间后 POST 路由给我一个错误: "Could not get any response." 奇怪的是我的 GET 和 DELETE 路由仍然工作正常。我试图进行一些日志记录,但收效甚微。如果有任何帮助,我将不胜感激!
这是我的应用程序:
from flask import Flask, request
from flask_cors import CORS, cross_origin
from flask_restful import Resource, Api
import pickle
app = Flask(__name__)
app.config['DEBUG'] = True
CORS(app)
@app.route("/get-blacklist")
def loadblacklist():
blacklist = pickle.load( open( "blacklist.p", "rb" ) )
return dumps(blacklist)
@app.route("/post-blacklist", methods=['POST'])
def puturl():
# Get and clean URL
url = request.form['url']
url = sanitise(url)
# Load the pickle
blacklist = list(pickle.load( open( "blacklist.p", "rb" ) ))
# Check if it's already in there
if url not in blacklist:
blacklist.append(url)
# Save the pickle
pickle.dump( blacklist, open( "blacklist.p", "wb" ) )
return 'You posted {}'.format(url)
@app.route("/remove-blacklist", methods=['DELETE'])
def removeurl():
# Get and clean the URL
url = request.form['url']
url = sanitise(url)
# Load the pickle
blacklist = list(pickle.load( open( "blacklist.p", "rb" ) ))
# Remove if its in there
if url in blacklist:
blacklist.remove(url)
# Save the pickle
pickle.dump( blacklist, open( "blacklist.p", "wb" ) )
return 'You removed {}'.format(url)
def sanitise(url):
# Sanitise
url = url.lower()
url = url.replace('www.', '')
url = url.replace('http://', '')
url = url.replace('https://', '')
if url[-1] == '/':
url = url[:-1]
return url
if __name__ == '__main__':
app.run()
这是我的配置文件:
import os
bind = '0.0.0.0:8000'
workers = 3
backlog = 2048
worker_class = "sync"
debug = False
proc_name = 'gunicorn.proc'
pidfile = './gunicorn.pid'
logfile = './debug.log'
loglevel = 'debug'
timeout = 1000
这是我用来启动 worker 的命令:
gunicorn -c app.conf -w3 --certfile=/etc/letsencrypt/live/mtfmu4.tk/cert.pem --keyfile=/etc/letsencrypt/live/mtfmu4.tk/privkey.pem api:app
我在我的 POST 路线中看不出有什么特别不同会导致这种情况发生 - 特别是因为它似乎工作了一段时间。
我是 运行 Python 3 在 virtualenv、Flask、apache2 上的 gunicorn 和 Ubuntu 14.04.
如有任何帮助,我们将不胜感激!
我发现解决方案是使用 with
语句打开我的 pickle 文件。似乎可以帮助发生任何 open/close 冲突。
我刚刚第一次接触 Flask 并尝试使用它来创建一个 API,它具有 GET、POST 和 DELETE 路由来管理 URL 黑名单。
一段时间后 POST 路由给我一个错误: "Could not get any response." 奇怪的是我的 GET 和 DELETE 路由仍然工作正常。我试图进行一些日志记录,但收效甚微。如果有任何帮助,我将不胜感激!
这是我的应用程序:
from flask import Flask, request
from flask_cors import CORS, cross_origin
from flask_restful import Resource, Api
import pickle
app = Flask(__name__)
app.config['DEBUG'] = True
CORS(app)
@app.route("/get-blacklist")
def loadblacklist():
blacklist = pickle.load( open( "blacklist.p", "rb" ) )
return dumps(blacklist)
@app.route("/post-blacklist", methods=['POST'])
def puturl():
# Get and clean URL
url = request.form['url']
url = sanitise(url)
# Load the pickle
blacklist = list(pickle.load( open( "blacklist.p", "rb" ) ))
# Check if it's already in there
if url not in blacklist:
blacklist.append(url)
# Save the pickle
pickle.dump( blacklist, open( "blacklist.p", "wb" ) )
return 'You posted {}'.format(url)
@app.route("/remove-blacklist", methods=['DELETE'])
def removeurl():
# Get and clean the URL
url = request.form['url']
url = sanitise(url)
# Load the pickle
blacklist = list(pickle.load( open( "blacklist.p", "rb" ) ))
# Remove if its in there
if url in blacklist:
blacklist.remove(url)
# Save the pickle
pickle.dump( blacklist, open( "blacklist.p", "wb" ) )
return 'You removed {}'.format(url)
def sanitise(url):
# Sanitise
url = url.lower()
url = url.replace('www.', '')
url = url.replace('http://', '')
url = url.replace('https://', '')
if url[-1] == '/':
url = url[:-1]
return url
if __name__ == '__main__':
app.run()
这是我的配置文件:
import os
bind = '0.0.0.0:8000'
workers = 3
backlog = 2048
worker_class = "sync"
debug = False
proc_name = 'gunicorn.proc'
pidfile = './gunicorn.pid'
logfile = './debug.log'
loglevel = 'debug'
timeout = 1000
这是我用来启动 worker 的命令:
gunicorn -c app.conf -w3 --certfile=/etc/letsencrypt/live/mtfmu4.tk/cert.pem --keyfile=/etc/letsencrypt/live/mtfmu4.tk/privkey.pem api:app
我在我的 POST 路线中看不出有什么特别不同会导致这种情况发生 - 特别是因为它似乎工作了一段时间。
我是 运行 Python 3 在 virtualenv、Flask、apache2 上的 gunicorn 和 Ubuntu 14.04.
如有任何帮助,我们将不胜感激!
我发现解决方案是使用 with
语句打开我的 pickle 文件。似乎可以帮助发生任何 open/close 冲突。