Серверы Flask-Bokeh: освобождение памяти при выходе - PullRequest
0 голосов
/ 11 мая 2018

У меня есть множество файлов 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)

Тогда для каждого сервера Bokeh у меня есть в 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)

Все работает в основном нормально. Однако я заметил, что после закрытия окна браузера сервера bokeh связанная память не освобождается. В результате мне необходимо периодически перезагружать веб-сервер для пополнения памяти.

Я пытался использовать 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 для освобождения памяти при закрытии вкладки / окна?

1 Ответ

0 голосов
/ 16 мая 2018

После случайного сбоя, я обнаружил, что это решение для оружия.запуск приложения с параметром thread освободит память обратно в Linux, когда я закрою страницы / вкладки в колбе

т.е. gunicorn -w 2 -t 3 app:app

...