Delete test_multiprocessing.py
removed for merge
This commit is contained in:
@@ -1,105 +0,0 @@
|
|||||||
import multiprocessing
|
|
||||||
import os
|
|
||||||
import threading
|
|
||||||
import queue
|
|
||||||
import time
|
|
||||||
import torch
|
|
||||||
from scraibe import Scraibe
|
|
||||||
|
|
||||||
def input_thread(input_queue, processed_event):
|
|
||||||
while True:
|
|
||||||
processed_event.wait() # Wait for the previous input to be processed
|
|
||||||
processed_event.clear() # Clear the event for the next input
|
|
||||||
inp = input("Enter the path to the audio file ('q' to quit, 'reload' to reload model): ")
|
|
||||||
input_queue.put(inp)
|
|
||||||
|
|
||||||
def clear_queue(queue):
|
|
||||||
while not queue.empty():
|
|
||||||
try:
|
|
||||||
queue.get_nowait()
|
|
||||||
except queue.Empty:
|
|
||||||
continue
|
|
||||||
|
|
||||||
def model_worker(request_queue, last_active_time, response_queue,loaded_event, running_event):
|
|
||||||
|
|
||||||
loaded_event.set()
|
|
||||||
|
|
||||||
model = Scraibe(dia_model="models/pyannote/config.yaml")
|
|
||||||
|
|
||||||
while True:
|
|
||||||
audio_path = request_queue.get()
|
|
||||||
if audio_path == "STOP":
|
|
||||||
break
|
|
||||||
running_event.set()
|
|
||||||
transcription = model.autotranscribe(audio_path)
|
|
||||||
running_event.clear()
|
|
||||||
response_queue.put(transcription)
|
|
||||||
last_active_time.value = time.time()
|
|
||||||
|
|
||||||
del model
|
|
||||||
torch.cuda.empty_cache()
|
|
||||||
clear_queue(request_queue)
|
|
||||||
clear_queue(response_queue)
|
|
||||||
loaded_event.clear()
|
|
||||||
|
|
||||||
|
|
||||||
def start_model_worker(request_queue, last_active_time, response_queue,loaded_event, running_event):
|
|
||||||
model_process = multiprocessing.Process(target=model_worker, args=(request_queue, last_active_time, response_queue,loaded_event, running_event))
|
|
||||||
model_process.start()
|
|
||||||
return model_process
|
|
||||||
|
|
||||||
def timer_thread(request_queue, last_active_time,loaded_event, running_event, timeout=30):
|
|
||||||
while True:
|
|
||||||
time.sleep(timeout)
|
|
||||||
|
|
||||||
if time.time() - last_active_time.value > timeout and loaded_event.is_set() and not running_event.is_set():
|
|
||||||
print(f"No activity for the last {timeout} seconds. Stopping the model worker.", flush=True)
|
|
||||||
request_queue.put("STOP")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
request_queue = multiprocessing.Queue()
|
|
||||||
response_queue = multiprocessing.Queue()
|
|
||||||
input_queue = queue.Queue()
|
|
||||||
last_active_time = multiprocessing.Value('d', time.time())
|
|
||||||
loaded_event = multiprocessing.Event()
|
|
||||||
running_event = multiprocessing.Event()
|
|
||||||
|
|
||||||
processed_event = multiprocessing.Event()
|
|
||||||
processed_event.set() # Initially set to allow the first input
|
|
||||||
|
|
||||||
model_process = start_model_worker(request_queue, last_active_time, response_queue,loaded_event ,running_event)
|
|
||||||
timer = threading.Thread(target=timer_thread, args=(request_queue, last_active_time, loaded_event, running_event), daemon=True)
|
|
||||||
input_handler = threading.Thread(target=input_thread, args=(input_queue,processed_event))
|
|
||||||
|
|
||||||
timer.start()
|
|
||||||
input_handler.start()
|
|
||||||
|
|
||||||
while True:
|
|
||||||
|
|
||||||
audio_file_path = input_queue.get() # Get input from the input thread
|
|
||||||
print(audio_file_path)
|
|
||||||
|
|
||||||
if audio_file_path.lower() == 'q':
|
|
||||||
request_queue.put("STOP")
|
|
||||||
model_process.join()
|
|
||||||
break
|
|
||||||
elif audio_file_path.lower() == 'reload':
|
|
||||||
if loaded_event.is_set():
|
|
||||||
request_queue.put("STOP")
|
|
||||||
model_process.join()
|
|
||||||
model_process = start_model_worker(request_queue, last_active_time, response_queue, loaded_event, running_event)
|
|
||||||
print("Model reloaded.")
|
|
||||||
elif not os.path.exists(audio_file_path):
|
|
||||||
print("File does not exist.")
|
|
||||||
else:
|
|
||||||
if not loaded_event.is_set():
|
|
||||||
model_process = start_model_worker(request_queue, last_active_time, response_queue, loaded_event, running_event)
|
|
||||||
request_queue.put(audio_file_path)
|
|
||||||
transcription = response_queue.get()
|
|
||||||
print(transcription)
|
|
||||||
|
|
||||||
processed_event.set() # Signal that the input has been processed
|
|
||||||
|
|
||||||
model_process.join()
|
|
||||||
timer.join()
|
|
||||||
input_handler.join()
|
|
||||||
Reference in New Issue
Block a user