Joblib - записать выходные строки в один файл - PullRequest
0 голосов
/ 02 марта 2020

В основном я делаю следующее:

  1. Перебор строк входного файла
  2. Для каждой строки обработка строки (на практике выполняется вызов API и выборка результат) и запись результата обработки в выходной файл. Каждый раз я пишу в один и тот же выходной файл.

Поскольку обработка строки может занять довольно много времени, я решил распараллелить мой код с помощью модуля joblib. Тем не менее, я впервые делаю такие вещи, и я не уверен, что то, что я делаю, безопасно (или чисто).

Пожалуйста, смотрите следующий пример:

from joblib import Parallel, delayed, parallel_backend


def api_call(query_str):
    # Perform API call 
    return "Hello %s" % query_str


def process_line_wrap(line, out_file):
    query = line.strip().split('\t')[0]
    result = api_call(query, session, verbose=verbose)
    out_file.write("%s\n" % result)


# And then in my main function 
# [...]

with open(foo, 'r') as in_file, open(bar, 'w') as out_file:
    out_file.write("header\n")
    with parallel_backend('threading', n_jobs=4):
        Parallel()(delayed(process_line_wrap)(line, out_file) for line in in_file)


if __name__ == '__main__':
    main()

Можно ли записывать строки вывода в один и тот же дескриптор файла? Я совсем не уверен, является ли это хорошей практикой или нет, и ищу указатели на лучшее / более чистое решение.

...