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谢谢你指出这一点。我想我在多线程应用程序中使用过这个类。您是对的,锁在多处理应用程序上不起作用。