解压缩文件时遇到了多处理问题。
我有一个在多个进程中使用SomeClass
的程序。每个进程都将运行_set_up_package
,以提取一些zip文件的内容。该zip文件仅需要提取一次,并将被所有进程使用。
我尝试通过以下方式仅提取一次zip文件:
这不起作用,因为有时我在程序中得到FileExistsError
。我以为所有进程都将共享该类变量锁,但是由于出现错误,所以我不相信它。
如何以过程安全的方式解压缩软件包?
class SomeClass:
__load_package_lock = threading.RLock()
def _set_up_package(self):
self.__load_package_lock.acquire()
try:
path_to_zip = os.path.join(self.work_path, "some_zip.zip"
dest = os.path.join(self.work_path, "some_dest")
if os.path.isdir(dest):
return
with zipfile.ZipFile(path_to_zip, 'r') as zip_ref:
zip_ref.extractall(dest)
finally:
self.__load_package_lock.release()
答案 0 :(得分:0)
实现了不使用锁的解决方案。
try:
with zipfile.ZipFile(path_to_zip, 'r') as zip_ref:
zip_ref.extractall(dest)
except FileExistsError:
self.logger.warning(
"Un-zipping failed because file already exists: '{0}'".format(path_to_zip))