У меня есть каталог файлов, таких как:
input_0.data
input_1.data
и т. Д. Я хочу проанализировать эти файлы с помощью функции, которая, как было показано, выводит 47 строк для input_0.data
при запуске сама по себе. Однако, когда я добавляю 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))
Очевидно, что я использую этот инструмент неправильно, но для меня не очевидно, где моя ошибка. Буду признателен за некоторые указания по этому вопросу
Кажется, что потоки пишут в файлы друг друга, хотя они явно заявляют, что работают с правильным файлом.