ThreadPoolExecutor意外地表现

时间:2018-05-08 20:38:54

标签: python linux python-3.x

我有一个文件目录,例如:

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

很明显我错误地使用了这个工具,但对我来说,我的错误并不明显。我很欣赏这方面的一些指导。

似乎线程正在写对方的文件,即使他们明确声明他们正在处理正确的文件。

0 个答案:

没有答案