Если вы хотите что-то сделать, не прерывая пользователя, вы можете использовать многопоточность с многопоточностью .
Если вы хотите сохранить что-то в переменной, которую может сделать каждый поток использовать, вы можете использовать очередь .
Это будет запускать все, что вам нужно, в другом потоке и сохранять в общей переменной.
- импорт модулей
import threading
import queue
Создать общую переменную
shared_var = queue.Queue()
Создайте функцию, которая проверяет, что вы хотите (в данном случае аудио), и редактирует общую переменную
Редактируйте общую переменную: shared_var.put(item)
(в этом случае, когда аудио обнаружил, что вы можете сказать audio_detected.put(True)
и / или current_tick_count.put(tick_count)
, или что-то в этом роде))
создайте поток и передайте функцию, которую вы сделали для проверки
thread = threading.Thread(target=function, args=arguments)
, где target
- функция, которую вы хотите вызвать в этом новом шаге, а args
- аргументы. вам нужно перейти в вашу функцию
Начать новую тему
thread.start()
В основном потоке или новом потоке, делайте что хотите с этой переменной
shared_var.get()
будет ждать, пока что-то будет добавлено к
shared_var
, а затем вернет то, что было добавлено.
Пример кода:
import threading
import queue
import time
text = queue.Queue()
def change(text):
time.sleep(3)
text.put("hello world")
thread = threading.Thread(target=change, args=(text,))
# ^ IMPORTANT! (,)
thread.start()
def display(text):
text = text.get() # This will wait till text has somthing inside and then returns it
print(text)
thread2 = threading.Thread(target=display, args=(text,))
# ^ IMPORTANT! (,)
thread2.start()
input() # To show it won't interrupt the user until the text has something
Извините, если этот ответ не так ясен. Я не знаком с pyaudio и win32, но я знаю threading и queue , так что вы можете просто поработать с этим и добавить свой код. Если вы хотите, вы можете отредактировать ответ со своим кодом.
Надеюсь, это поможет!