python threading.timer устанавливает ограничение по времени, когда программа заканчивается

У меня есть несколько вопросов, связанных с установкой максимального времени выполнения функции в Python. На самом деле, я хотел бы использоватьpdfminer преобразовать.pdf файлы в.txt.

Проблема в том, что очень часто некоторые файлы невозможно декодировать и занимают очень много времени. Итак, я хочу установитьthreading.Timer() ограничить время конвертации для каждого файла до 5 секунд. Кроме того, я работаю под Windows, поэтому я не могу использоватьsignal Модуль для этого.

Мне удалось запустить код преобразования сpdfminer.convert_pdf_to_txt() (в моем коде это "c"), но я не уверен, что в следующем кодеthreading.Timer() работает. (Я не думаю, что это правильно ограничивает время для каждой обработки)

Итак, я хочу:

Конвертировать PDF в TXT

Ограничение по времени для каждого преобразования составляет 5 секунд, если оно заканчивается, выведите исключение и сохраните пустой файл

Сохраните все текстовые файлы в одной папке

Если есть какие-либо исключения / ошибки, сохраните файл, но с пустым содержимым.

Вот текущий код:

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

Ответы на вопрос(2)

Ваш ответ на вопрос