我有这个代码
进口螺纹
导入操作系统
导入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是否兼容。
问题:
提前感谢您的回答。