В проекте django мне нужно сгенерировать некоторые файлы PDF для объектов в db. Поскольку для создания каждого файла требуется несколько секунд, я использую сельдерей для асинхронного запуска задач.Является ли python zipfile потокобезопасным?
Проблема в том, что мне нужно добавить каждый файл в zip-архив. Я планировал использовать zipfile-модуль python, но разные задачи можно запускать в разных потоках, и мне интересно, что произойдет, если две задачи попытаются добавить файл в архив одновременно.
Является ли следующий код безопасным или нет? Я не могу найти какую-либо ценную информацию в официальном документе python.
try:
zippath = os.path.join(pdf_directory, 'archive.zip')
zipfile = ZipFile(zippath, 'a')
zipfile.write(pdf_fullname)
finally:
zipfile.close()
Примечание: это работает под Python 2.6
Какой метод параллелизма сельдерея вы используете? Если ваш код выполняется в задачах celery с использованием метода параллельной обработки по умолчанию, то они выполняются в отдельных процессах, и вам не нужно беспокоиться о безопасности потоков. – mher
Тогда проблема не в потокобезопасности, это одновременный доступ к записи файлов. –