【问题标题】:Flask POST route becoming unresponsiveFlask POST 路由变得无响应
【发布时间】:2017-01-14 02:56:31
【问题描述】:

我刚刚开始使用 Flask,并尝试使用它来创建一个 API,该 API 具有 GET、POST 和 DELETE 路由来管理 URL 黑名单。

一段时间后,POST 路由给我一个错误:“无法得到任何响应。”奇怪的是我的 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

这是我用来启动工人的命令:

gunicorn -c app.conf -w3 --certfile=/etc/letsencrypt/live/mtfmu4.tk/cert.pem --keyfile=/etc/letsencrypt/live/mtfmu4.tk/privkey.pem api:app

我在我的 POST 路线中看不出有什么特别不同的地方会导致这种情况发生 - 特别是因为它似乎工作了一段时间。

我在 apache2 和 Ubuntu 14.04 上的 virtualenv、Flask、gunicorn 中运行 Python 3。

任何帮助将不胜感激!

【问题讨论】:

  • 您如何发布数据?即使用 curl 或其他一些 python 脚本?
  • 我实际上是使用 jQuery Ajax 调用发布的。我有一种感觉,我可能已经解决了这个问题,但我会再给它 12 个小时左右的时间,看看它是否会再次崩溃。如果可行,将在下面发布我的解决方案????

标签: python-3.x flask apache2 gunicorn flask-restful


【解决方案1】:

我发现解决方案是使用with 语句打开我的pickle 文件。似乎有助于发生任何打开/关闭冲突。

【讨论】:

    猜你喜欢
    • 2020-10-09
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多