gpt4 book ai didi

python - Flask-Bokeh-Gunicorn : Models must be owned by a single document

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:20 32 4
gpt4 key购买 nike

这是一段代码,用于运行 Flask 应用程序以及受启发于 Bokeh 服务器的代码 flask_gunicorn_embed.py on Github .

起初它就像一个魅力;但是,刷新页面后,出现此错误。

Models must be owned by only a single document: ... (rest truncated)

顺便说一下,代码是使用 gunicorn 运行的。
此外,create_figure() 函数返回一个layout

from Decision_Tree.Plot.decision_tree import create_figure
if __name__ == '__main__':
import sys
sys.exit()

app = Flask(__name__)


def modify_doc(doc):
# Create the plot
plot = create_figure()
# Embed plot into HTML via Flask Render
doc.add_root(plot)

bkapp = Application(FunctionHandler(modify_doc))

# This is so that if this app is run using something like "gunicorn -w 4" then
# each process will listen on its own port
sockets, port = bind_sockets("x.x.x.x", 0)


@app.route('/', methods=['GET'])
def bkapp_page():
script = server_document('http://x.x.x.x:%d/bkapp' % port)
return render_template("index.html", script=script, template="Flask")


def bk_worker():
asyncio.set_event_loop(asyncio.new_event_loop())

bokeh_tornado = BokehTornado({'/bkapp': bkapp}, extra_websocket_origins=["x.x.x.x:5000"])
bokeh_http = HTTPServer(bokeh_tornado)
bokeh_http.add_sockets(sockets)

server = BaseServer(IOLoop.current(), bokeh_tornado, bokeh_http)
server.start()
server.io_loop.start()


from threading import Thread
Thread(target=bk_worker).start()

期待任何帮助!附言有意将域替换为 x.x.x.x。

最佳答案

您没有包含所有代码,因此无法确定,但最可能的解释是您正在某处创建 Bokeh 模型并在对 modify_doc 的不同调用之间重新使用它们.例如,如果您的 create_figure 函数引用了在函数外部作为模块全局创建的全局 ColumnDataSource(或其他),就会出现这种情况。这是行不通的,Bokeh 模型不能在不同的文档/ session 之间重复使用。每次调用 modify_doc 都需要为 session 返回一组 全新 的 Bokeh 模型,否则不同的用户会共享状态,这出于多种原因并不好(所以它是通过引发该异常明确禁止)。

关于python - Flask-Bokeh-Gunicorn : Models must be owned by a single document,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51564026/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com