我有一个文件目录,例如:
input_0.data
input_1.data
等等。我想用一个函数解析这些文件,该函数在单独运行时显示为input_0.data
输出47行。但是,当我将ThreadPoolExecutor
带入混合并实际运行多个线程时,input_0.data
的输出变得很大,很快超过已知的好47行。
我尝试使用的代码如下,不必要的细节明显减少:
def find_moves(param_list):
input_filename = param_list[0]
output_filename = param_list[1]
print(input_filename+" "+output_filename, flush=True)
input_file = open(input_filename, "r")
output_file = open(output_filename, "w")
for line in input_file:
if do_log_line(line):
log = format_log(line)
print(log, file=output_file, flush=True)
input_file.close()
output_file.close()
if len(argv) != 3:
print("Usage:\n\tmoves.py [input_dir] [output_dir]")
quit()
input_files = list()
for file in glob(path.join(argv[1], "input_*.data")):
input_files.append(file)
input_files = sorted(input_files)
with ThreadPoolExecutor(max_workers=8) as executor:
for file_number, input_filename in enumerate(input_files):
output_filename = "moves_"+str(file_number)+".csv"
output_filename = path.join(argv[2], output_filename)
executor.submit(find_moves, (input_filename, output_filename))
很明显我错误地使用了这个工具,但对我来说,我的错误并不明显。我很欣赏这方面的一些指导。
似乎线程正在写对方的文件,即使他们明确声明他们正在处理正确的文件。