Я уже много месяцев общался с Multiprocessing, пытаясь выяснить элегантное повторяемое решение моей проблемы: нужно, чтобы несколько процессов записывали в один и тот же файл, не вступая друг в друга.Ошибка травления на concurrent.Futures.PoolProcessExecutor - как заблокировать?
Я использовал взаимопроводимость/потребительские отношения для преодоления этих препятствий в прошлом. Хорошие статьи и сообщения, которые я нашел, включают:
Я попытался реализовать функцию, аналогичную общему счетчику, описанный здесь:
Я стал большим поклонником простоты concurrent.Futures ProcessPoolExecutor и с помощью карты на каждом исполнителе, как описано здесь:
Сегодня вечером, я думал, что нашел ответ на мой поиск, открыв модуль под названием крепеж для readwrit e locks, но, по-видимому, этот подход работает только с потоками.
ВОПРОС: Есть элегантное, простое решение для обмена блокировки, так что все процессы от ProcessPoolExecutor не перезаписывать друг друга при записи в файл?
ПРИМЕЧАНИЕ: Я пишу около 800 м строк ~ 200 полей в один файл, используя csv.DictWriter. Другие рекомендации приветствуются.
Я просто попытался использовать глобальные переменные и настройки блокировки, если не установлен в качестве глобальной переменной. Все еще открыт для лучших решений. Может быть, joblib? – ccdpowell