ThreadPoolExecutor ведет себя неожиданно - PullRequest
0 голосов
/ 08 мая 2018

У меня есть каталог файлов, таких как:

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

Очевидно, что я использую этот инструмент неправильно, но для меня не очевидно, где моя ошибка. Буду признателен за некоторые указания по этому вопросу

Кажется, что потоки пишут в файлы друг друга, хотя они явно заявляют, что работают с правильным файлом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...