我正在编写一个通过 Ngrok 隧道过滤 HTTP 请求的 Flask 应用程序。当我对隧道 URL 进行硬编码时,一切正常。当我试图在我的程序中引入一些自动化逻辑来检查是否有一个活动隧道时,问题就出现了:
ngrok.get_tunnels()
我的计划是建立一个新连接并在缺少活动连接时更新我的通知 URL。不幸的是,我什至无法到达那一步,因为我的程序出错并显示消息:
Your account is limited to 1 simultaneous ngrok agent session.\nActive ngrok agent sessions in region 'us'
此错误发生在
ngrok.get_tunnels()
我试过终止
ngrok.exe
进程,但是当我的应用程序调用我的 ngrok 函数时,错误仍然发生。
我正在寻找一种方法来让代理会话在我的程序中使用,这样如果一个新会话已经处于活动状态,就不会尝试启动它。
这是我要实现的逻辑:
def tunnel_host():
active_tunnels = ngrok.get_tunnels()
if not active_tunnels:
tunnel = ngrok.connect(5000, bind_tls=True)
tunnel_url = tunnel.public_url
return tunnel_url
else:
tunnel = ngrok.get_tunnels()
tunnel_url = tunnel[0].public_url
return tunnel_url
非常感谢任何反馈。
这可能会以不同的方式发生,可能是您在 Flask 上激活了调试选项导致了这种情况。如果将调试设置为 False,则可以修复此问题。
每次代码更改时,可能是 Werkzeug 重新加载器(这是 Flask 随开发服务器提供的库)重新启动进程。
如果将 use_reloader 设置为 False,您会看到该行为消失,但您也会失去重新加载功能:
app.run(port=5001, debug=config.DEBUG, host='0.0.0.0', use_reloader=False)
您也可以在使用 flask run 命令时禁用重新加载程序:
FLASK_DEBUG=1 flask run --no-reload
在我的例子中,诀窍是将选项 monitor_thread 设置为 False。
from pyngrok import conf, ngrok
conf.get_default().monitor_thread = False
来自 ngrok 的下午。在发布这篇文章时,免费帐户一次只能运行 1 个 ngrok 代理。要查看和终止您帐户中任何正在运行的代理,请查看 ngrok 仪表板代理部分 并单击图标以停止代理。