You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Jupyter Notebook变量自动共享至本地Flask服务脚本?

Jupyter Notebook与本地Flask服务共享变量的实现方案

这个需求完全可行,下面提供两种适合本地开发的实现方式,操作简单直接:

方式一:同进程变量共享(Jupyter内启动Flask)

这种方式下Flask和Jupyter运行在同一个Python进程中,变量可以直接共享,无需额外存储介质:

  1. 在Jupyter单元格中启动Flask服务(用线程避免阻塞Notebook):
from flask import Flask, render_template_string
import pandas as pd
import threading

app = Flask(__name__)
# 全局变量用于存储共享的DataFrame
shared_df = None

@app.route('/')
def show_df():
    global shared_df
    if shared_df is not None:
        # 将DataFrame转为带样式的HTML表格
        df_html = shared_df.to_html(classes='table table-striped')
        return render_template_string('''
            <html>
                <head>
                    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
                </head>
                <body>
                    <div class="container mt-4">
                        <h2>当前共享的DataFrame</h2>
                        {{ df_html|safe }}
                    </div>
                </body>
            </html>
        ''', df_html=df_html)
    return "<h2>暂无共享数据</h2>"

# 启动Flask线程
def run_flask():
    app.run(debug=True, use_reloader=False)  # 关闭自动重载,防止全局变量重置

threading.Thread(target=run_flask).start()
  1. 在另一个Jupyter单元格中更新共享变量:
global shared_df
# 生成或处理你的DataFrame
shared_df = pd.DataFrame({
    '姓名': ['张三', '李四', '王五'],
    '年龄': [25, 30, 28],
    '城市': ['北京', '上海', '广州']
})

完成后刷新浏览器访问http://localhost:5000,就能看到最新的DataFrame展示。

方式二:跨进程文件共享(Flask单独运行)

如果需要Flask和Jupyter分开启动(比如Flask作为独立服务运行),可以用本地文件作为中间介质共享数据:

  1. 编写Flask服务脚本app.py:
from flask import Flask, render_template_string
import pandas as pd
import pickle
import os

app = Flask(__name__)
# 定义存储DataFrame的文件路径
SHARED_FILE = 'shared_data.pkl'

@app.route('/')
def show_df():
    if os.path.exists(SHARED_FILE):
        # 读取最新的DataFrame文件
        with open(SHARED_FILE, 'rb') as f:
            df = pickle.load(f)
        df_html = df.to_html(classes='table table-striped')
        return render_template_string('''
            <html>
                <head>
                    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
                </head>
                <body>
                    <div class="container mt-4">
                        <h2>当前共享的DataFrame</h2>
                        {{ df_html|safe }}
                    </div>
                </body>
            </html>
        ''', df_html=df_html)
    return "<h2>暂无共享数据</h2>"

if __name__ == '__main__':
    app.run(debug=True)
  1. 在Jupyter单元格中保存处理好的DataFrame到共享文件:
import pandas as pd
import pickle

# 生成处理后的DataFrame
processed_df = pd.DataFrame({
    '日期': ['2024-01-01', '2024-01-02', '2024-01-03'],
    '温度': [10, 12, 8],
    '湿度': [60, 55, 70]
})

# 保存到共享文件
with open('shared_data.pkl', 'wb') as f:
    pickle.dump(processed_df, f)

启动Flask服务后,每次刷新浏览器都会读取最新的文件内容,展示Jupyter中生成的DataFrame。

进阶扩展

如果需要实时自动刷新页面(无需手动刷新),可以结合Flask-SocketIO实现WebSocket推送,Jupyter更新DataFrame后主动通知前端页面刷新,适合对实时性要求高的场景。

内容的提问来源于stack exchange,提问作者Bertrand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:30:46