В основном я делаю следующее:
- Перебор строк входного файла
- Для каждой строки обработка строки (на практике выполняется вызов 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()
Можно ли записывать строки вывода в один и тот же дескриптор файла? Я совсем не уверен, является ли это хорошей практикой или нет, и ищу указатели на лучшее / более чистое решение.