ArgosTranslate循环调用崩溃求助:需处理超5000行文本
解决ArgosTranslate循环翻译4000-5000次后崩溃的问题
问题背景
用自定义库my_tr_lib.py封装ArgosTranslate实现英日翻译,循环调用翻译函数时,次数达到4000-5000次程序就崩溃,需要实现能稳定处理超5000行文本的翻译逻辑。
原自定义库代码
# filename: my_tr_lib.py import argostranslate.package import argostranslate.translate from_code = "en" to_code = "ja" # Download and install Argos Translate package argostranslate.package.update_package_index() available_packages = argostranslate.package.get_available_packages() package_to_install = next( filter( lambda x: x.from_code == from_code and x.to_code == to_code, available_packages ) ) argostranslate.package.install_from_path(package_to_install.download()) def tr(from_text: str) -> str: translatedText = argostranslate.translate.translate(from_text, from_code, to_code) return (translatedText)
原测试代码
import my_tr_lib # Example: open and read file line_count=0 while(True): print(my_tr_lib.tr("Hello")) # Example: translate file line one by one line_count= line_count+ 1 print(line_count) # crash program at aprox over the 4000-5000 line count
解决方案
崩溃核心原因是每次调用tr函数时,重复触发翻译资源的初始化操作,导致内存泄漏或资源耗尽。优化思路是提前加载翻译模型并全局复用,避免重复创建资源。
修改后的自定义库代码
# filename: my_tr_lib.py import argostranslate.package import argostranslate.translate from_code = "en" to_code = "ja" # 下载并安装翻译包(仅首次运行时执行) argostranslate.package.update_package_index() available_packages = argostranslate.package.get_available_packages() package_to_install = next( filter( lambda x: x.from_code == from_code and x.to_code == to_code, available_packages ) ) argostranslate.package.install_from_path(package_to_install.download()) # 提前加载翻译器实例,全局复用 translator = argostranslate.translate.get_translation(from_code, to_code) def tr(from_text: str) -> str: if not from_text.strip(): return "" return translator.translate(from_text)
优化后的测试代码
import my_tr_lib line_count = 0 target_count = 6000 # 测试6000次验证稳定性 while line_count < target_count: result = my_tr_lib.tr("Hello") line_count += 1 if line_count % 100 == 0: # 每100次打印一次进度,减少IO压力 print(f"第{line_count}次翻译结果:{result}") print(f"完成{line_count}次翻译,程序运行稳定")
优化说明
- 提前调用
get_translation获取翻译器实例并全局保存,避免每次翻译都重新初始化模型资源 - 增加空文本判断,过滤无效翻译请求,减少不必要的资源消耗
- 测试代码调整循环逻辑,降低打印频率,避免频繁IO操作影响程序稳定性
内容的提问来源于stack exchange,提问作者Jaydip Patel
相关产品推荐
相关产品推荐

