Поток отделения условно бесконечного цикла от графической части(kivy)

class ScreenApp(App):
    def build(self):
        Window.clearcolor = (.17, .19, .24, 1)
        Window.size = (setWindowSize())
        self.icon = 'icon.png'
        self.title = 'LORA'
        self.screen_manager = ScreenManager()
        print("initializing first screen..")
        return screen_manager

def recAudio():
    global LNG
    r = sr.Recognizer()
    with sr.Microphone() as sourse:
        print('Cкажи что-нибудь')
        audio = r.listen(sourse)
    data = ''
    try:
        data = r.recognize_google(audio, language = LNG).lower()
        print("YOU: " +data)
    except sr.UnknownValueError:
            print('Google не понимает аудио, ошибка неизвестна')
    except sr.RequestError as ee:
            print('Ошибка запроса: '+ee)
    return data

def listen():
    date = 'date'
    whois = 'who is'
    wiki.set_lang("en")
    copy = 'copy'
    paste = 'paste'
    open = 'open'
    browser = 'browser'
    notepad = 'notepad'
    say = 'say'
    joke = 'joke'

    while True:
        if isRUS() == True:
            date = 'дату'
            whois = 'кто такой'
            wiki.set_lang("ru")
            copy = 'скопируй'
            paste = 'вставь'
            open = 'открой'
            browser = 'хром'
            notepad = 'блокнот'
            say = 'скажи'
            joke = 'пошути'

        text = recAudio()
        response = ''
        #скокпировать вставить доделать
        if(copy in text):
            copy()
        if(paste in text):
            paste()


# выполнение команд с упоминанием Лоры
        if (wakeUp(text) == True):
            print('ты сказал кодовую фразу!')
            response += greeting(text)
        loraspeak()
#дальше проверка на кодовые слова и соответствующие функции


lora_app = ScreenApp()
lora_app.run()

ScreenApp - класс графической библиотеки от kivy, подробное описание элементов в builder listen() - функция которая должна выполнятся независимо от графического интерфейса и не вызывать зависаний

Подскажите как лучше или проще вызывать условно бесконечный цикл распознования голоса в отдельном потоке, независимо от графического интерфейса, желательно создать дополнительный поток, не трогая уже созданные функции kivy, которые обрабатывают нажатия и так далее


Ответы (0 шт):