Python - py7zr 和线程 --> 它们可以一起工作吗?

问题描述 投票:0回答:0

我有这个代码

    
进口螺纹
    
导入操作系统
    
导入py7zr
    
从 py7zr 导入 FILTER_LZMA2、FILTER_CRYPTO_AES256_SHA256、FILTER_DELTA、PRESET_DEFAULT

    
类My_Thread(threading.Thread):
   ``   
def init(自我,名称,存档,CheminSource,根,标签,对象):
   ``    ``   
threading.Thread.init(自我)
   ``    ``   
self.name = 名字
   ``    ``   
self.Archive = 存档
   ``    ``   
self.CheminSource = CheminSource
   ``    ``   
self.Root = 根
   ``    ``   
self.Label = 标签
   ``    ``   
self.Objet = 对象

   ``   
def运行(自己):
   ``    ``   
ZipArchiveAtome(self.Archive,self.CheminSource,self.Root,self.Label,self.Objet)

    
def ZipArchiveAtome(存档、CheminSource、根目录、标签、对象):

   ``   
TbleTemp = CheminSource.split("\")
   ``   
lgCheminSource = len(TbleTemp)
   ``   
if (TbleTemp[lgCheminSource - 1] == ""):
   ``    ``   
lgCheminSource = lgCheminSource - 1

   ``   
TbleTemp = Root.split("\")
   ``   
lgRoot = len(TbleTemp)
   ``   
if (TbleTemp[lgRoot - 1] == ""):
   ``    ``   
lgRoot = lgRoot - 1

   ``   
Chaine = "\".join(TbleTemp[lgCheminSource:lgRoot])

   ``   
Chemin01 = os.path.join(Root,Objet)
   ``   
Chemin02 = os.path.join(标签、链、对象)
   ``   
Archive.write(Chemin01,Chemin02)

    
def LanceThreads():

   ``   
if len(TbleThreads)< MaxThreads:
   ``    ``   
return(真)

   ``   
i0 = 1
   ``   
对于 TbleThreads 中的项目:
   ``    ``   
如果不是 Item.is_alive():
   ``    ``    ``   
del TbleThreads[i0:i0+1]
   ``    ``    ``   
回归(真)
   ``    ``   
其他:
   ``    ``    ``   
i0 = i0 + 1

   ``   
返回(错误)

    
def CreationThreads(存档,CheminSource,根,RepRacine,Objet):

   ``   
而不是 LanceThreads():
   ``    ``   
继续

   ``   
线程 = My_Thread(对象、存档、CheminSource、根、RepRacine、对象)
   ``   
Thread.start()
   ``   
TbleThreads.append(线程)

    
filter = [{'id': FILTER_DELTA}, {'id': FILTER_LZMA2, 'preset': PRESET_DEFAULT}]
    
目标 = r'D:\Test-7z-01.7z'
    
CheminSource = r'D:\Test'
    
RepRacine = r'测试'

    
TbleThreads = []
    
最大线程数 = 16

    
with py7zr.SevenZipFile(Target, mode='w', filters=filter, blocksize=10485760) 作为存档:
   ``   
for (root, dirs, files) in os.walk(CheminSource):

   ``    ``   
对于目录中的目录:
   ``    ``    ``   
CreationThreads(存档,CheminSource,根,RepRacine,目录)

   ``    ``   
文件中的文件:
   ``    ``    ``   
CreationThreads(存档、CheminSource、根目录、RepRacine、文件)

   ``   
对于 TbleThreads 中的项目:
    
Item.join()

当我运行它时,我有这个错误:

线程 Test-03.py 中的异常: 追溯(最近一次通话): 文件“A:) - System\Python\Python - 3.10\lib hreading.py”,第 1016 行,在 _bootstrap_inner
自我运行() 运行中的文件“d:\Test-19.py”,第 25 行 ZipArchiveAtome(self.Archive,self.CheminSource,self.Root,self.Label,self.Objet) ZipArchiveAtome 中的文件“d:\Test-19.py”,第 64 行
Archive.write(Chemin01,Chemin02) 文件“A:) - System\Python\Python - 3.10\lib\site-packages\py7zr\py7zr.py”,第 1010 行,写入 文件夹 = self.header.initialize() AttributeError: 'SevenZipFile' 对象没有属性 'header'

我做过的测试:

  • 绕过多线程就OK了

  • 当我使用多线程但在“运行”def 中时,我调用我的 def 就可以了

    def run(self): 测试(self.Archive,self.CheminSource,self.Root,self.Label,self.Objet)

def 测试(存档、CheminSource、根目录、标签、对象): print("化学来源:", CheminSource) 打印(“根:”,根)

我想知道多线程和py7zr是否兼容。

问题:

    • 我的代码正确吗?
    • 创建存档时py7zr是否兼容多线程?

提前感谢您的回答。

python-3.x multithreading python-multithreading py7zr
© www.soinside.com 2019 - 2024. All rights reserved.