Python 如何在多处理程序中提取包
解压文件时,我遇到了一个多处理问题 我有一个在多个进程中使用Python 如何在多处理程序中提取包,python,file,multiprocessing,unzip,Python,File,Multiprocessing,Unzip,解压文件时,我遇到了一个多处理问题 我有一个在多个进程中使用SomeClass的程序。每个进程都将运行\u set\u up\u package,它提取一些zip文件的内容。此zip文件只需提取一次,并将由所有进程使用 我尝试通过以下方式仅提取一次zip文件: 正在检查文件是否已存在 将线程块创建为类变量 这不起作用,因为有时我会在程序中获得fileexisterror。我原以为类变量锁会被所有进程共享,但因为我得到了一个错误,我不相信是这样 如何以过程安全的方式解压包 实现了一个不使用锁的解决
SomeClass
的程序。每个进程都将运行\u set\u up\u package
,它提取一些zip文件的内容。此zip文件只需提取一次,并将由所有进程使用
我尝试通过以下方式仅提取一次zip文件:
fileexisterror
。我原以为类变量锁会被所有进程共享,但因为我得到了一个错误,我不相信是这样
如何以过程安全的方式解压包
实现了一个不使用锁的解决方案
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))
实现了一个不使用锁的解决方案
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))
每个进程都有自己的
SomeClass
,每个进程都有自己独立的\uuuu加载\uu包\uu锁
类属性。您需要将锁作为参数传递给每个进程。另外,我不认为线程.Lock
与多处理.Lock
是一回事-线程和进程不是一回事。@martineau谢谢你指出这一点。我想我在多线程应用程序中使用过这个类。你说得对,锁在多处理应用程序上不起作用。每个进程都有自己的SomeClass
,每个进程都有自己单独的\uuu load\u package\u lock
类属性。您需要将锁作为参数传递给每个进程。另外,我不认为线程.Lock
与多处理.Lock
是一回事-线程和进程不是一回事。@martineau谢谢你指出这一点。我想我在多线程应用程序中使用过这个类。您是对的,锁在多处理应用程序上不起作用。