这是与Flask应用程序一起运行Flask应用程序的代码,灵感来自于
flask_gunicorn_embed.py on Github。
起初,它像一种魅力。但是,刷新页面后,会发生此错误。
模型必须仅由一个文档拥有:...(其余部分被截断)
顺便说一下,代码是使用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。
答案 0 :(得分:2)
您尚未包含所有代码,因此无法确定,但是最可能的解释是您正在某个地方创建Bokeh模型,并在对modify_doc
的不同调用之间重用它们。例如,如果您的create_figure
函数引用了在函数外部作为全局模块创建的全局ColumnDataSource
(或其他任何内容),情况就是这样。这将不起作用,Bokeh模型无法在不同的文档/会话之间重复使用。每次对modify_doc
的调用都需要为会话返回一个全新的散景模型集,否则,由于多种原因,不同的用户将共享状态不好的东西(因此明确禁止使用)引发该异常)。