You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 10:10:26