首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用progress_recorder (celery-progress)的问题:延长了任务的时间

使用progress_recorder (celery-progress)的问题:延长了任务的时间
EN

Stack Overflow用户
提问于 2021-06-30 00:08:28
回答 1查看 22关注 0票数 0

我想在下载csv文件时使用celery-progress来显示进度条

我的任务遍历cvs文件列表,打开每个文件,过滤数据并生成一个包含csv过滤文件的zip文件夹(参见下面的代码)

但是,根据调用set_progress的位置,任务将花费更多时间

如果我计算(和set_progress)处理的文件,即使对于具有100000条记录的文件,速度也是相当快的

但是如果我计算文件中的记录,这将为用户提供更多的信息,它将时间延长了20%

我不明白为什么

我如何处理此问题?

代码语言:javascript
复制
for file in listOfFiles:
    
    # 1 - count for files processed
    i += 1
    progress_recorder.set_progress(i,numberOfFilesToProcess, description='Export in progess...')

    records = []

    with open(import_path + file, newline='', encoding="utf8") as csvfile:
        spamreader = csv.reader(csvfile, delimiter=',', quotechar='|')
        csv_headings = ','.join(next(spamreader))
        for row in spamreader:
            # 2 - count for records in each files processed (files with 100000 records)    
            # i += 1
            # progress_recorder.set_progress(i,100000, description='Export in progess...')                 
            site = [row[0][positions[0]:positions[1]]]
            filtered_site = filter(lambda x: filter_records(x,sites),site)
            for site in filtered_site:
                records.append(','.join(row))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-30 15:03:55

如果有非常多的记录,那么很可能不需要更新每个记录的进度,并且每次在后端更新进度的开销可能会变得很大。相反,您可以在内部循环中执行以下操作:

代码语言:javascript
复制
if i % 100 == 0:
    # update progress for every 100th entry
    progress_recorder.set_progress(i,numberOfFilesToProcess, description='Export in progress...')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68182266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档