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

Issue using progress_recorder (celery-progress): extends time of task

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

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

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

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

但如果我算上文件中的记录,那将对用户提供更多信息,它会将时间延长 20

我不明白为什么

我该如何处理这个问题

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))

如果有非常多的记录,那么可能没有必要更新每个记录的进度,并且每次在后端更新进度的开销可能会变得很大。相反,你可以在内循环中做这样的事情:

if i % 100 == 0:
    # update progress for every 100th entry
    progress_recorder.set_progress(i,numberOfFilesToProcess, description='Export in progress...')