使用 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...')
我想在下载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...')