python / flask应用程序中的端口管理

时间:2017-11-20 13:43:20

标签: python flask flask-restful

我正在使用带有python编程语言的微框架Flask编写REST API。在调试模式下,应用程序检测源代码中的任何更改,并使用相同的主机和端口重新启动自身。在生产模式(无调试)中,应用程序在更改源代码时不会自行重启,因此我必须自己重启应用程序;在这种情况下的问题是应用程序无法使用以前在旧版本应用程序中使用的端口运行,因此我被要求在每次应用程序更新时更改端口:

这就是我的代码的样子:

from flask import Flask, jsonify, request
import json
import os

app = Flask(__name__) 


@app.route('/method1', methods=['GET'])
def method1():
    return jsonify({"result":"true"})

@app.route('/method2', methods=['GET'])
def method2():
    return jsonify({"result":"true"})


if __name__ == '__main__':
    app.run(debug=True,port=15000)

如何解决这个问题?或者我是否必须在每次更新应用程序时更改端口?

1 个答案:

答案 0 :(得分:2)

此代码test.py无法更改.run() args中指定的端口:

from flask import Flask    

app = Flask(__name__)

@app.route("/")
def index():
    return "123"

app.run(host="0.0.0.0", port=8080) # or host=127.0.0.1, depends on your needs

如果在run函数中指定了所需的端口,则没有任何东西可以强制烧瓶绑定到允许范围内的另一个TCP端口。如果此端口已被其他应用程序使用 - 您将看到 OSError: [Errno 98] Address already in use 发射后。

UPD :如果我使用python test.py命令多次运行此代码,则从我的电脑输出:

artem@artem:~/Development/$ python test.py
 * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
^Cartem@artem:~/Development$ python test.py
 * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
^Cartem@artem:~/Development/$ python test.py
 * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
^Cartem@artem:~/Development/$ python test.py
 * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
127.0.0.1 - - [20/Nov/2017 17:04:56] "GET / HTTP/1.1" 200 -

正如您所见,每次烧瓶都被绑定到8080端口。

UPD2 :当您为服务设置生产环境时 - 您不需要处理烧录代码中的端口 - 您只需要在Web服务器配置中指定所需的端口,该端口将通过wsgi layer与脚本一起使用。