Web Services 在Google Colab上使用Python-flask连接到localhost?

vojdkbi0  于 2023-10-24  发布在  Go
关注(0)|答案(3)|浏览(236)

我是一个新来的flask。我不能访问localhost:5000或127.0.0.1:5000。我使用flask。我已经尝试了许多解决方案,但没有一个为我工作。这里的代码

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
   return ('Hello World')

if __name__ == '__main__':
   app.run()

我得到这个

* Serving Flask app "__main__" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

当我转到localhost:5000或127.0.0.1:5000时,我得到
127.0.0.1拒绝连接localhost拒绝连接

m0rkklqb

m0rkklqb1#

尝试像这样运行您的应用程序:

if __name__ == '__main__':
    app.run(host='0.0.0.0',port=5000)

这也使得服务器在外部可见。如果机器的IP地址是192.168.X.X,那么,从同一个网络,您可以在5000端口访问它。
这也可能是防火墙的问题,在这种情况下,请执行以下操作:

sudo ufw allow 5000

编辑:

由于您是在Google Colab上运行,而不是在本地系统上运行,因此运行步骤会有所不同。
请注意
Google Colab提供了一个VM(虚拟机),所以我们不能像在本地机器上运行本地Web服务器时那样访问本地主机(它所做的只是将其路由到本地机器的本地主机)。我们可以做的是使用ngrok将其暴露给公共URL。下面是Python库flask-ngrok。
按照步骤here运行flask-ngrok

w46czmvw

w46czmvw2#

像这样使用Google colab的output库:

from google.colab import output
output.serve_kernel_port_as_window(5000)

你会得到一个链接https://localhost:5000/,指向某个地址,比如https://j92e7rh245-496ff2e9c6d22116-5000-colab.googleusercontent.com/,可以从笔记本外部访问。你可以在一个单独的浏览器标签中查看这个链接。

请参阅:浏览到在内核上执行的服务器(不确定为什么serve_kernel_port_as_iframe不工作)。

在后台运行Flask应用

为了防止一个运行的cell阻塞整个notebook,需要将服务器作为子进程运行。
我是这么做的

1.保存脚本到文件
%%writefile run_flask.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
   return ('Hello World')

if __name__ == '__main__':
   app.run()

2.后台运行脚本

import subprocess
with open('out.txt', "w") as stdout_file, open('err.txt', "w") as stderr_file:
    process = subprocess.Popen(
        "python run_flask.py",  # Your command here
        shell=True,
        stdout=stdout_file,
        stderr=stderr_file
    )

从笔记本内部查看localhost

请注意,您可以从Notebook中查看在localhost上运行的服务器,以查看是否仅在单元格中运行命令

!curl http://127.0.0.1:5000
qq24tv8q

qq24tv8q3#

这种方法的问题是flask服务器可能很大。本质上,你必须将所有notebook代码复制到一个单元格中,然后以脚本形式写出。简单地将notebook保存为GitHub上的脚本(比如),然后!wget并运行它似乎更容易。这应该附加到建议使用%%writefile的答案中。

相关问题