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