【发布时间】:2018-10-22 02:19:02
【问题描述】:
我在一个目录中有许多 Bokeh Server 文件,例如.. /dir/bokeh/,假设 bokeh 服务器名为 bokeh1.py、bokeh2.py、bokeh3.py
文件结构如下:
|--dir
|---flask.py
|---bokeh
|--bokeh1.py
|--bokeh2.py
我将它们全部部署在烧瓶上,如下所示:
files=[]
for file in os.listdir("/dir/bokeh/"):
if file.endswith('.py'):
file="bokeh/"+file
files.append(file)
argvs = {}
urls = []
for i in files:
argvs[i] = None
urls.append(i.split('\\')[-1].split('.')[0])
host = 'myhost.com'
apps = build_single_handler_applications(files, argvs)
bokeh_tornado = BokehTornado(apps, extra_websocket_origins=["myhost.com"])
bokeh_http = HTTPServer(bokeh_tornado)
sockets, port = bind_sockets("myhost.com", 0)
bokeh_http.add_sockets(sockets)
然后对于每个散景服务器,我在 flask.py 中都有:
@app.route("/bokeh1")
def bokeh1():
bokeh_script = server_document("http://11.111.11.111:%d/bokeh1" % port)
return render_template("bokserv.html", bokeh_script=bokeh_script)
一切正常。但是,我注意到在关闭散景服务器浏览器窗口后,相关的内存没有被释放。因此,我需要定期重启网络服务器以补充内存。
我尝试过使用gc.collect()ala
@app.route("/bokeh1")
def bokeh1():
bokeh_script = server_document("http://11.111.11.111:%d/bokeh1" % port)
return render_template("bokserv.html", bokeh_script=bokeh_script)
gc.collect()
但这似乎并没有解决问题...... 当标签页/窗口关闭时,如何使用 Flask/Bokeh 释放内存?
【问题讨论】:
-
gc.collect()不会被调用,因为您将它放在return语句之后。 -
我只是尝试将它放在
return之前,大约10 次刷新后,它产生MemoryError。 -
您可以将一些日志记录选项传递给
BokehTornado以启用更详细的内存日志记录:bokeh.pydata.org/en/latest/docs/reference/server/tornado.html 如果您启用这些选项,您会看到有关未收集的会话或模型的消息吗? -
在
BokehTornado内,我通过了mem_log_frequency_milliseconds=5000。不过,ubuntu 终端中没有日志,只有我通常会看到的消息,即ColumnDataSource's columns must be same length和我的脚本print语句
标签: python-3.x ubuntu memory-management flask gunicorn