KoljaB / RealtimeTTS

Converts text to speech in realtime
1.39k stars 119 forks source link

Getting an error from multiprocessing for Coqui #62

Open DavidJennicson opened 2 months ago

DavidJennicson commented 2 months ago

I installed coqui engine for my project by refering the github docs and i got the following error

File "", line 1, in File "C:\Users\david\anaconda3\Lib\multiprocessing\spawn.py", line 122, in spawn_main exitcode = _main(fd, parent_sentinel) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\david\anaconda3\Lib\multiprocessing\spawn.py", line 131, in _main prepare(preparation_data) File "C:\Users\david\anaconda3\Lib\multiprocessing\spawn.py", line 246, in prepare _fixup_main_from_path(data['init_main_from_path']) File "C:\Users\david\anaconda3\Lib\multiprocessing\spawn.py", line 297, in _fixup_main_from_path main_content = runpy.run_path(main_path, ^^^^^^^^^^^^^^^^^^^^^^^^^ File "", line 291, in run_path File "", line 98, in _run_module_code File "", line 88, in _run_code File "C:\Users\david\PycharmProjects\ai\e.py", line 3, in engine = CoquiEngine() # replace with your TTS engine ^^^^^^^^^^^^^ File "C:\Users\david\AppData\Roaming\Python\Python311\site-packages\RealtimeTTS\engines\base_engine.py", line 11, in call instance = super().call(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\david\AppData\Roaming\Python\Python311\site-packages\RealtimeTTS\engines\coqui_engine.py", line 190, in init self.create_worker_process() File "C:\Users\david\AppData\Roaming\Python\Python311\site-packages\RealtimeTTS\engines\coqui_engine.py", line 248, in create_worker_process self.synthesize_process.start() File "C:\Users\david\anaconda3\Lib\multiprocessing\process.py", line 121, in start self._popen = self._Popen(self) ^^^^^^^^^^^^^^^^^ File "C:\Users\david\anaconda3\Lib\multiprocessing\context.py", line 224, in _Popen return _default_context.get_context().Process._Popen(process_obj) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\david\anaconda3\Lib\multiprocessing\context.py", line 336, in _Popen return Popen(process_obj) ^^^^^^^^^^^^^^^^^^ File "C:\Users\david\anaconda3\Lib\multiprocessing\popen_spawn_win32.py", line 45, in init prep_data = spawn.get_preparation_data(process_obj._name) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\david\anaconda3\Lib\multiprocessing\spawn.py", line 164, in get_preparation_data _check_not_importing_main() File "C:\Users\david\anaconda3\Lib\multiprocessing\spawn.py", line 140, in _check_not_importing_main raise RuntimeError(''' RuntimeError: An attempt has been made to start a new process before the current process has finished its bootstrapping phase.

    This probably means that you are not using fork to start your
    child processes and you have forgotten to use the proper idiom
    in the main module:

        if __name__ == '__main__':
            freeze_support()
            ...

    The "freeze_support()" line can be omitted if the program
    is not going to be frozen to produce an executable.

    To fix this issue, refer to the "Safe importing of main module"
    section in https://docs.python.org/3/library/multiprocessing.html
KoljaB commented 2 months ago

I'm sorry, I need to update the docs. Please add entry protection to your code.

Write

if __name__ == '__main__':

and put your code behind that.

The lib uses multiprocessing, so if __name__ == '__main__': is needed to prevent unexpected behavior - for a detailed explanation pls look at the official Python documentation on multiprocessing.