我的python flask
应用使用nohup
运行。即它永远是活的。我看到每次用户从页面提交时都会创建一个线程。这是因为flask.run与multithread=true
一起。但我的问题是即使在处理结束后,线程似乎也没有被关闭。我正在使用ps -eLf |grep userid
命令进行检查。我看到很多线程在代码执行结束后仍然处于活动状态。并在另一次提交完成后添加。重新启动应用程序本身时,将删除所有线程。
在不重新启动应用程序的情况下关闭线程的标准是什么?
许多帖子如these建议使用gc.collect
,del object
等。
我有许多用户定义的类在提交时实例化。一个对象指另一个。所以
是因为内存没有被释放?
我应该使用gc.collect
还是del objects
?
一旦变量的scope
结束,Pythons就应该清除这些对象。这是对的吗?
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)
答案 0 :(得分:0)
看起来问题是paramiko
对象没有关闭。打开SFTPClient
或SSHClient
后,必须明确关闭它。我假设随着我的类对象(定义了paramiko对象),它将被关闭。但它没有。
所以在我的过程结束时,我打电话给下面的行。现在线程似乎正在正确关闭
if objs.ssh:
objs.ssh.close()
if objs.sftp:
objs.t.close()
objs.sftp.close()
del objs
gc.collect()