python threading.timer define o limite de tempo quando o programa fica sem tempo

Eu tenho algumas perguntas relacionadas à definição do tempo máximo de execução de uma função no Python. Na verdade, eu gostaria de usarpdfminer para converter o.pdf arquivos para.txt.

O problema é que, com muita freqüência, alguns arquivos não são possíveis de decodificar e levam um tempo extremamente longo. Então eu quero definirthreading.Timer() para limitar o tempo de conversão de cada arquivo para 5 segundos. Além disso, corro sob o Windows para não poder usar osignal módulo para isso.

Consegui executar o código de conversão compdfminer.convert_pdf_to_txt() (no meu código é "c"), mas não tenho certeza de que o código a seguir,threading.Timer() trabalho. (Não acho que restrinja adequadamente o tempo de cada processamento)

Em resumo, quero:

Converta o pdf para txt

O prazo para cada conversão é de 5 s. Se ficar sem tempo, lance uma exceção e salve um arquivo vazio

Salve todos os arquivos txt na mesma pasta

Se houver exceções / erros, ainda salve o arquivo, mas com conteúdo vazio.

Aqui está o código atual:

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("") 

questionAnswers(2)

yourAnswerToTheQuestion