Python колбу темы не закрывает - PullRequest
0 голосов
/ 18 мая 2018

My python flask приложение запускается с использованием nohup.т.е. это всегда вживую.Я вижу, что он создает поток каждый раз, когда пользователь отправляет со страницы.Это потому, что flask.run с multithread=true.Но моя проблема в том, что даже после окончания обработки поток, похоже, не закрывается.Я проверяю это с помощью команды ps -eLf |grep userid.где я вижу много потоков, все еще активных еще долго после выполнения кода.и он добавляется, когда делается еще одна отправка.Все потоки удаляются при перезапуске самого приложения.

По каким критериям ветка закрывается без перезапуска приложения?

Многие сообщения, такие как эти предполагают gc.collect, del object и т. Д. У меня естьмногие пользовательские классы создаются при отправке.и один объект относится к другому.Так

это потому, что память не освобождается?

Должен ли я использовать gc.collect или del objects?Питоны должны очистить эти объекты после того, как scope переменной закончится.это правильно?

app = Flask(__name__)
@app.route('/submit',methods = ['GET','POST'])
def submit():
    #obj1=class1()
    #obj2=class2(obj1)
    #obj3=class3(obj1)
    #refer objects
    #process data
    #done

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=4000, threaded=True, debug=False)

1 Ответ

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

Похоже, проблема в том, что объект paramiko не закрывается.Как только SFTPClient или SSHClient открыт, он должен быть явно закрыт.Я предположил, что вместе с моим объектом класса (где определен объект paramiko) он будет закрыт.Но это не так.

Итак, в конце моего процесса я звоню ниже строк.Теперь темы, кажется, закрываются правильно

    if objs.ssh:
        objs.ssh.close()
    if objs.sftp:
            objs.t.close()
            objs.sftp.close()
    del objs
    gc.collect()
...