Python的ZipFile在多线程多输出文件场景下是否线程安全?
Python zipfile 在M:M场景下的线程安全性
已知把多个源文件写入单个目标压缩包(M:1场景)的操作不是线程安全的,那这种限制是否适用于M:M场景——也就是每个源文件对应一个独立的压缩包?
示例场景:
file_1.txt -> file_1.zip ... file_m.txt -> file_m.zip
对应的伪代码:
orig_to_zip_name = [ ['file1.txt','zipped_file_1.zip'], # ... ['filem.txt','zipped_file_m.zip'] ] def single_zip(file_pairs): zipped_name, original_name = file_pairs with ZipFile(zipped_name, 'w') as zipf: zipf.write(original_name, compress_type=ZIP_DEFLATED) with concurrent.futures.ThreadPoolExecutor() as executor: results = executor.map(single_zip, orig_to_zip_name)
这种M:M场景是线程安全的。
zipfile的线程不安全问题,本质是多个线程同时操作同一个ZipFile实例或者同一个目标文件时,会出现资源竞争导致的异常或数据损坏。而在你的M:M场景里,每个线程都会创建独立的ZipFile实例,操作完全独立的目标压缩包,线程之间没有共享任何关键资源,不存在竞争冲突,所以不会有线程安全问题。
内容的提问来源于stack exchange,提问作者Error_2646
相关产品推荐
相关产品推荐

