这是问题的 Flask 设置。
import threading
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, World!'
@app.route('/restart', methods=['GET'])
def restart():
shutdown() # How do I shutdown the Flask server?
flask_thread.join()
flask_thread = threading.Thread(target=start_flask, args=(new_IP,))
flask_thread.start()
return 'Hello again, World!'
def start_flask(ip):
app.run(host=ip)
old_IP = '123.123.123.123'
new_IP = '234.234.234.234'
flask_thread = threading.Thread(target=start_flask, args=(old_IP,))
flask_thread.start()
如何关闭 Flask 服务器,并使用不同的 IP 重新启动它?
抱歉,但我想您可能对从哪里获取 IP 服务器地址有误解。
简化为三个IP地址:
那么IP地址是如何分配的:
http://127.x.x.x
,而不是使用完整形式的环回地址(如 http://localhost
)。DNS 记录
另一个可能与您的问题相关的主题是编辑 DNS 记录。所以基本上 DNS 记录是一个站点名,例如主机名“https://spokentutor.com”有多个与之关联的 DNS 记录(在此处检查它们:https://dnschecker.org/all-dns-records-of-domain .php?query=spokentutor.com&rtype=ALL&dns=google)。其中一条记录是
A
记录,其中存储站点 IP 地址 76.76.21.21
。因此,当 smn 想要访问主机名时,Firefox/Chrome/Safari 将请求 DNS 记录并获取 IP 地址。因此,基本上,如果该网站的托管名称为“http://mylongsite.org”,您可以通过编辑 DNS 记录来更改其 IP 地址。
总结一下:
Flask 确实有一个选项可以在运行应用程序时设置
host
IP 地址 app.run(host='XX.XX.XX.XX')
。但是,此选项不会更改您的 IP 地址,无论是本地 IP 地址、专用网络 IP 地址还是全局 IP 地址。此选项的作用是控制谁可以看到该应用程序:1)仅您的计算机(host = 'localhost'
); 2)您的私人网络(host='10.x.x.x'
); 3)到整个互联网(host='0.0.0.0'
)。
请发表评论并告诉我这些信息是否有意义。抱歉发了这么长的帖子。
可以使用
os.execl
来实现这一目标:
ip_addr.py
IP = '123.123.123.123'
应用程序.py
import os
import sys
from flask import Flask
from ip_addr import ip
new_IP = '0.0.0.0'
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, World!'
@app.route('/restart', methods=['GET'])
def restart():
with open('IP.py', 'w') as f:
f.write(f'ip = "{new_IP}"\n')
os.execl(sys.executable, sys.executable, sys.argv[0])
app.run(host=ip)
服务器收到请求后会以指定的新IP重新启动。