Jupyter Notebook 中运行 Flask 应用

最近遇到一个奇怪的需求,就是要在 Jupyter Notebook 中使用 Flask。由于每一个 Jupyter Notebook 都独立运行在一个 Kernel 中,直接启动 Flask 变得不太可能。经过几次测试,最终使用子进程的方式完成了加载。

首先,把示例 Flask 代码写着一个代码单元格中。注意,此时需要在单元格头部添加魔术方法将此单元格中的代码保存至目录下方,以文件形式存在。

%%writefile run.py
from flask import Flask

app = Flask(__name__)

@app.route("/")
def demo():
    return "Hello, word!"

接下来,使用 subprocess 在单元格中启动一个子进程。

import subprocess as sp

# 启动子进程执行 Flask app
server = sp.Popen("FLASK_APP=run.py flask run", shell=True)
server

然后,可以请求测试。

import requests

requests.get(url="http://127.0.0.1:5000").content

注意,使用完毕之后关掉该子进程。

server.terminate() # 结束子进程,关闭端口占用

至此,就可以成功在 Jupyter Notebook 单元格中执行 Flask 应用了。

完整示例代码