estou fazendo um programa para zipar arquivos de backup, porém quando tento disparar a zipagem usando threads para ficar assíncrono, ele roda, não dá nenhum erro, porém não acontece nada.
def zipar(self,com_lzma=True):
lzma,rar = self.para_zipar_hoje()
if com_lzma:
for nome in lzma:
t = threading.Thread(target=self.zipar_lzma,args=(nome,))
t.start
for nome in rar:
t = threading.Thread(target=self.winrar_rar,args=(nome,))
t.start
else:
for nome in rar.extend(lzma):
t = threading.Thread(target=self.winrar_rar,args=(nome,))
t.start
quando faço sem thread ou asyncio ele roda normal… como faço para disparar tudo ao mesmo tempo de forma assíncrona?
ps: está em português para entenderem a lógica de onde quero chegar.
com join funcionou, mas não ficou assíncrono, ainda está esperando um por um terminar.
os arquivos tem entre 0,5 e 25 giga ent não tem como esperar um a um.
fiz um batch, porém ele está zipando tudo em mesmo formato (rar do winrar), e tem arquivos que dependendo do conteúdo é melhor zipar em lzma2, por isso estou fazendo o programa, a zipagem não pode ocorrer em servidor, as maquinas locais que fazem esse processo.
Tenta disparar e inicializar todas as threads que você precisa e aplica o join somente após ter inicializado todas elas!
Já tentou fazer dessa forma?
O problema que eu acredito que está acontecendo é que como as threads fazem o processamento async, o processo principal que é o de start do script python termina antes das threads terminarem seus trabalhos, pois não tem ninguém ouvindo elas e fazendo o processo principal aguardar os secundários terminarem, matando tudo.
tentei mas não entendi esses modulos.
enlouqueci e criei uma lista parâmetro do objeto, ziper.__threadlist = []
e no lugar de digitar t.join coloquei self.__threadlist.append(t) e funcionou… como? realmente não entendi. ps: essa lista some ao final da execução, nem mesmo o retorno 0 ou 1 como num procedimento acontece.
meu deus que parada complexa, fiquei lendo sobre o assunto e cheguei a conclusão de que não estava funcionando porquê o tempo de execução dele estava indefinido, o que ficava definido no .join() porém o vscode entendia como “o thread da vez” e não como “dispara e manda fazer”, já em uma lista, ele “aloca o thread” como um objeto existente deixando seu tempo ad eterno, o que não acontece porquê assim que o código termina, o python limpa e o thread se desfaz.
ps: foi o que entendi lendo sobre threads e objetos, não quer dizer que seja a verdade.