python threading.timer establece el límite de tiempo cuando el programa se queda sin tiempo
Tengo algunas preguntas relacionadas con la configuración del tiempo de ejecución máximo de una función en Python. De hecho, me gustaría usarpdfminer
para convertir el.pdf
archivos a.txt
.
El problema es que muy a menudo, algunos archivos no son posibles de decodificar y toman mucho tiempo. Entonces quiero establecerthreading.Timer()
para limitar el tiempo de conversión para cada archivo a 5 segundos. Además, corro bajo Windows, así que no puedo usar elsignal
módulo para esto.
Logré ejecutar el código de conversión conpdfminer.convert_pdf_to_txt()
(en mi código es "c
"), pero no estoy seguro de que en el siguiente código,threading.Timer()
trabajos. (No creo que limite adecuadamente el tiempo para cada procesamiento)
En resumen, quiero:
Convierte el pdf a txt
El límite de tiempo para cada conversión es de 5 segundos, si se agota el tiempo, lanza una excepción y guarda un archivo vacío
Guarde todos los archivos txt en la misma carpeta
Si hay alguna excepción / error, aún guarde el archivo pero con contenido vacío.
Aquí está el código actual:
import converter as c
import os
import timeit
import time
import threading
import thread
yourpath = 'D:/hh/'
def iftimesout():
print("no")
with open("D:/f/"+g+"&"+t+"&"+name+".txt", mode="w") as newfile:
newfile.write("")
for root, dirs, files in os.walk(yourpath, topdown=False):
for name in files:
try:
timer = threading.Timer(5.0,iftimesout)
timer.start()
t=os.path.split(os.path.dirname(os.path.join(root, name)))[1]
a=str(os.path.split(os.path.dirname(os.path.join(root, name)))[0])
g=str(a.split("\\")[1])
with open("D:/f/"+g+"&"+t+"&"+name+".txt", mode="w") as newfile:
newfile.write(c.convert_pdf_to_txt(os.path.join(root, name)))
print("yes")
timer.cancel()
except KeyboardInterrupt:
raise
except:
for name in files:
t=os.path.split(os.path.dirname(os.path.join(root, name)))[1]
a=str(os.path.split(os.path.dirname(os.path.join(root, name)))[0])
g=str(a.split("\\")[1])
with open("D:/f/"+g+"&"+t+"&"+name+".txt", mode="w") as newfile:
newfile.write("")