0

I have this code

import threading import os import py7zr from py7zr import FILTER_LZMA2, FILTER_CRYPTO_AES256_SHA256, FILTER_DELTA, PRESET_DEFAULT

class My_Thread(threading.Thread): `` def init(self, name, Archive, CheminSource, Root, Label, Objet): `` `` threading.Thread.init(self) `` `` self.name = name `` `` self.Archive = Archive `` `` self.CheminSource = CheminSource `` `` self.Root = Root `` `` self.Label = Label `` `` self.Objet = Objet

`` def run(self): `` `` ZipArchiveAtome(self.Archive, self.CheminSource, self.Root, self.Label, self.Objet)

def ZipArchiveAtome(Archive, CheminSource, Root, Label, Objet):

`` 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(Label,Chaine,Objet) `` Archive.write(Chemin01, Chemin02)

def LanceThreads():

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

`` i0 = 1 `` for Item in TbleThreads: `` `` if not Item.is_alive(): `` `` `` del TbleThreads[i0:i0+1] `` `` `` return(True) `` `` else: `` `` `` i0 = i0 + 1

`` return(False)

def CreationThreads(Archive, CheminSource, root, RepRacine, Objet):

`` while not LanceThreads(): `` `` continue

`` Thread = My_Thread(Objet, Archive, CheminSource, root, RepRacine, Objet) `` Thread.start() `` TbleThreads.append(Thread)

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

TbleThreads = [] MaxThreads = 16

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

`` `` for dir in dirs: `` `` `` CreationThreads(Archive, CheminSource, root, RepRacine, dir)

`` `` for file in files: `` `` `` CreationThreads(Archive, CheminSource, root, RepRacine, file)

`` for Item in TbleThreads: Item.join()

and when I run it, I have this error :

Exception in thread Test-03.py: Traceback (most recent call last): File "A:\01) - System\Python\Python - 3.10\lib\threading.py", line 1016, in _bootstrap_inner
self.run() File "d:\Test-19.py", line 25, in run ZipArchiveAtome(self.Archive, self.CheminSource, self.Root, self.Label, self.Objet) File "d:\Test-19.py", line 64, in ZipArchiveAtome
Archive.write(Chemin01, Chemin02) File "A:\01) - System\Python\Python - 3.10\lib\site-packages\py7zr\py7zr.py", line 1010, in write folder = self.header.initialize() AttributeError: 'SevenZipFile' object has no attribute 'header'

Test I have done :

  • When I bypass the multithreading, it's OK.

  • when I use the multithreading but in the "run" def I call my def it's ok like

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

def Test(Archive, CheminSource, Root, Label, Objet): print("Chemin Source : ", CheminSource) print("Root : ", Root)

i wonder if the multithreading and py7zr are compatible.

Questions :

    • Is my code correct ?
    • Is py7zr compatible with the multithreading when you want to create the archive ?

Thanks in advance for your answers.

0 Answers0