Задать вопрос
freakssha
@freakssha

Как выполнить действия с виджетами и далее — произвести распознание речи, используя concurrent.futures.thread?

Цель - сначала выполнить действия с виджетами (создать Button_1 и удалить Button_2), затем включить распознание речи.

Использую модуль concurrent.futures.thread, который отлично справлялся с созданием асинхронного кода, необходимого для выполнения некоторых задач, до внедрения распознания речи.

В этой попытке компилятор проходится по каждой строке - об этом говорит вывод строк, помеченных комментариями '#for test'. Проблема : кнопки не создаются и не удаляются, но распознание речи работает :
def someFunc(self, event):
        print('Interface change started') #for test
        #creates Button_1
        #deletes config.Button_2 (from another func)
        print('Interface change finished') #for test

        with ThreadPoolExecutor(max_workers=5) as executor:
            fut = executor.submit(self.voiceRecognition)
            fut.result()

    def voiceRecognition (self):
        print('Voice recognition was started') #for test
        r = sr.Recognizer()
        with sr.Microphone(device_index=1) as sourse:
            audio = r.listen(sourse)
            query = r.recognize_google(audio) 
            print(query.lower())
       print('Voice recognition was finished') #for test

Выходные данные :
Interface change started
Interface change finished
Voice recognition started
Voice recognition finished


Попробовал сделать отдельную функцию 'ProcessCallManagement' и обернуть в отдельную функцию ' interfaceChanges' действия с кнопками, но... Проблема : не выполняются ни действия с кнопками, ни распознание речи :
def processCallManagement(self, event):
        with ThreadPoolExecutor(max_workers=5) as executor:
            fut1 = executor.submit(self.interfaceChanges)
            fut1.result()
        
            fut2 = executor.submit(self.voiceRecognition)
            fut2.result()

    def interfaceChanges(self):
        print('Interface change started') #for test
        #creates Button_1
        #deletes config.Button_2 (from another func)
        print('Interface change finished') #for test

    def voiceRecognition(self):
        print('Voice recognition was started') #for test
        r = sr.Recognizer()
        with sr.Microphone(device_index=1) as sourse:
            audio = r.listen(sourse)
            query = r.recognize_google(audio)
            print(query.lower())
       print('Voice recognition was finished') #for test

Выходные данные :
Interface change started

Вот, как и что с кнопками конкретно (отдельно от контекста они работают, и работают нормально) :
Button_1 = wx.Button(self)
        self.Bind(wx.EVT_BUTTON, self.eventFunc, Button_1)
        config.Button_2.Destroy()


Помогите разобраться с причинами возникновения проблем и их практическим решением по возможности используя именно модуль concurrent.futures.thread. Если это возможно, конечно же. Спасибо.
  • Вопрос задан
  • 34 просмотра
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы