【发布时间】:2018-05-18 09:09:36
【问题描述】:
我的 python flask 应用程序使用 nohup 运行。即它总是活的。我看到每次用户从页面提交时它都会创建一个线程。这是因为 flask.run 是 multithread=true。但我的问题是即使处理结束后,线程似乎也没有关闭。我正在使用ps -eLf |grep userid 命令进行检查。在代码执行结束后很长时间内,我看到许多线程仍然处于活动状态。当另一个提交完成时它会被添加。当应用程序本身重新启动时,所有线程都会被删除。
在不重启应用的情况下关闭线程的标准是什么?
these 等许多帖子建议使用 gc.collect、del object 等。
我有许多用户定义的类在提交时被实例化。一个对象引用另一个对象。所以
是因为内存没有被释放吗?
我应该使用gc.collect 还是del objects?
一旦变量的scope 结束,Python 应该清除这些对象。对吗?
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)
【问题讨论】:
-
Flask 的内置开发服务器确实不适合多线程使用,因此缺乏对线程管理的支持。我建议阅读推荐的部署服务器的优缺点,看看哪个最适合您的需求。热门选择:Gunicorn、Twisted、SocketIO、Gevent、nginx。
-
这也是一个比较小的网络应用。但很少有用户同时使用。所以没有寻找比烧瓶更好的平台。我肯定会看看上面的其中一个。
标签: python multithreading flask garbage-collection