首页 > 解决方案 > Python Flask 生成文本文件

问题描述

我有一个简单的烧瓶应用程序,它运行一些后端函数,这些函数从一堆不同的地方获取检索数据,并将该数据添加到文本文件中。然后,我正在阅读所有文本文件并将它们交给页面。我这样做是这样的:

@app.route("/metrics", methods=["GET"])
def metrics():

def generate():

    Metrics.GetMetrics().metrics()

    settings = get_config()
    metrics_folder = settings['settings'].get('metrics_folder', '/opt/metrics/')

    all_metrics = []

    for filename in os.listdir(metrics_folder):
        if filename != '.gitignore':
            m = open(metrics_folder + filename)
            for l in m.readlines():
                all_metrics.append(l)

    for metric in all_metrics:
        yield metric

return Response(stream_with_context(generate()), mimetype='text/plain')

这工作正常,但我正在使用的文件数量不断增加(高达 38k),我已经开始注意到速度变慢了。我想知道是否有比我更聪明的人对如何更有效地做到这一点有任何想法或提示?也许与多处理有关?或者可能是一种方法来找出目录中的所有文件并同时将它们全部扔到网页上,而不是使用stream_with_context?谢谢!

标签: pythonflask

解决方案


是的,如果无法将所有内容都放在一个数据库中,我同意您的看法,并且您确实需要检查多个文件,然后将其编译成一个文本文档等,我会研究异步编程,否则它将继续一次执行一个命令并花一些时间:https ://realpython.com/python-async-features/

如果您需要链接才能开始使用。


推荐阅读