VoiceDialogue / main.py
liumaolin
Enable debug mode with global configuration and detailed task logging when active
e0f42b2
raw
history blame
2.82 kB
import multiprocessing
import os
import sys
import typing
from pathlib import Path
if __name__ == '__main__':
if hasattr(sys, '_voice_dialogue_started'):
sys.exit(0)
sys._voice_dialogue_started = True
# 设置multiprocessing启动方法为spawn,避免fork问题
if hasattr(multiprocessing, 'set_start_method'):
try:
multiprocessing.set_start_method('spawn', force=True)
except RuntimeError:
pass
# Pyinstaller 多进程支持
multiprocessing.freeze_support()
# 禁用各种可能导致多进程问题的并行处理
os.environ.update({
"TOKENIZERS_PARALLELISM": "false",
# "OMP_NUM_THREADS": "1",
# "MKL_NUM_THREADS": "1",
# "NUMEXPR_NUM_THREADS": "1",
# "OPENBLAS_NUM_THREADS": "1",
# "VECLIB_MAXIMUM_THREADS": "1",
# "BLIS_NUM_THREADS": "1",
# # 禁用huggingface的多进程
# "HF_HUB_DISABLE_PROGRESS_BARS": "1",
# "TRANSFORMERS_NO_ADVISORY_WARNINGS": "1",
# # 禁用torch的多进程
# "TORCH_NUM_THREADS": "1",
# "PYTORCH_JIT": "0",
# # 禁用joblib的loky后端,使用threading
# "JOBLIB_START_METHOD": "threading",
# "SKLEARN_JOBLIB_START_METHOD": "threading",
})
HERE = Path(__file__).parent
lib_path = HERE / "src"
if lib_path.exists() and lib_path.as_posix() not in sys.path:
sys.path.insert(0, lib_path.as_posix())
from voice_dialogue.core.launcher import launch_system
from voice_dialogue.core.constants import set_debug_mode
from voice_dialogue.cli.args import create_argument_parser
from voice_dialogue.api.server import launch_api_server
language: typing.Literal['zh', 'en'] = 'en'
def main():
"""
主程序入口函数
根据命令行参数选择启动模式:
- cli: 启动命令行语音对话系统
- api: 启动HTTP API服务器
"""
parser = create_argument_parser()
args = parser.parse_args()
set_debug_mode(args.debug)
print(f"""
{"=" * 80}
VoiceDialogue - 语音对话系统
{"=" * 80}
运行模式: {args.mode.upper()}
调试模式: {'启用' if args.debug else '禁用'}
{"=" * 80}
""")
try:
if args.mode == 'cli':
print(f"语言设置: {args.language}")
print(f"说话人: {args.speaker}")
print("正在启动命令行语音对话系统...")
launch_system(args.language, args.speaker)
elif args.mode == 'api':
launch_api_server(
host=args.host,
port=args.port,
reload=args.reload
)
except KeyboardInterrupt:
print("\n程序被用户中断")
except Exception as e:
print(f"程序运行出错: {e}")
raise
if __name__ == '__main__':
main()