抓取生产工单,抓取发料异常
This commit is contained in:
@@ -1217,15 +1217,13 @@ def find_free_port(start_port=5050, max_port=5100):
|
|||||||
return s.getsockname()[1]
|
return s.getsockname()[1]
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
# 智能判断:如果是通过 PyInstaller 打包运行的,或者是 Werkzeug 重载进程,则控制浏览器打开行为
|
# 这里是专门给开发环境(python app.py)使用的
|
||||||
is_frozen = getattr(sys, 'frozen', False)
|
# 生产环境 Gunicorn 不会执行这部分代码,而是直接导入 app 变量
|
||||||
# 当 Werkzeug (Flask内置服务器) 使用热加载时,它会启动一个监控主进程和一个运行子进程。
|
|
||||||
# 子进程会有 WERKZEUG_RUN_MAIN 这个环境变量。
|
|
||||||
is_werkzeug_reloader = os.environ.get('WERKZEUG_RUN_MAIN') == 'true'
|
|
||||||
|
|
||||||
# 只有在不需要热加载,或者是热加载的真正工作子进程中,才去寻找端口并打开浏览器
|
# 检测是否是通过 PyInstaller 打包运行
|
||||||
if is_frozen or not app.debug or is_werkzeug_reloader:
|
is_frozen = getattr(sys, 'frozen', False)
|
||||||
# 动态获取一个可用端口
|
|
||||||
|
if os.environ.get('WERKZEUG_RUN_MAIN') != 'true':
|
||||||
try:
|
try:
|
||||||
port = find_free_port()
|
port = find_free_port()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -1236,16 +1234,13 @@ if __name__ == '__main__':
|
|||||||
threading.Thread(target=open_browser, args=(port,), daemon=True).start()
|
threading.Thread(target=open_browser, args=(port,), daemon=True).start()
|
||||||
print("🚀 前端展示后端服务已启动!")
|
print("🚀 前端展示后端服务已启动!")
|
||||||
print(f"👉 本机访问地址: http://127.0.0.1:{port}")
|
print(f"👉 本机访问地址: http://127.0.0.1:{port}")
|
||||||
print(f"👉 局域网访问地址: http://192.168.7.198:{port} (允许手机/其他电脑访问)")
|
|
||||||
else:
|
else:
|
||||||
# 如果是热加载的主控进程,随便给个默认端口(反正它不干活),并且不打开浏览器
|
|
||||||
port = 5050
|
port = 5050
|
||||||
|
|
||||||
# 更改为动态端口,避开被占用的端口。修改 host 为 0.0.0.0 允许局域网访问
|
|
||||||
app.run(
|
app.run(
|
||||||
debug=not is_frozen,
|
debug=not is_frozen,
|
||||||
host='0.0.0.0',
|
host='0.0.0.0',
|
||||||
port=port,
|
port=port,
|
||||||
threaded=True,
|
threaded=True,
|
||||||
use_reloader=False # 彻底关闭 Flask 内置的热加载,避免双进程互相影响
|
use_reloader=False
|
||||||
)
|
)
|
||||||
Reference in New Issue
Block a user