【问题标题】:googletrans Translate() not working on Spyder but works on Colabgoogletrans Translate() 不适用于 Spyder 但适用于 Colab
【发布时间】:2020-06-22 14:39:59
【问题描述】:

我在本地 repo 中对离线数据使用 googletrans 翻译器:

translator = Translator()
translations = []
for element in df['myText']:
    translations.append(translator.translate(element).text)
df['translations'] = translations

在 Google Colab 上它工作正常(20 分钟),但在我的机器上它需要 30 分钟并因 ReadTimeout 错误而停止:

  File "<ipython-input-9-2209313a9a78>", line 4, in <module>
    translations.append(translator.translate(element).text)

  File "C:\Anaconda3\lib\site-packages\googletrans\client.py", line 182, in translate
    data = self._translate(text, dest, src, kwargs)

  File "C:\Anaconda3\lib\site-packages\googletrans\client.py", line 83, in _translate
    r = self.client.get(url, params=params)

  File "C:\Anaconda3\lib\site-packages\httpx\_client.py", line 763, in get
    timeout=timeout,

  File "C:\Anaconda3\lib\site-packages\httpx\_client.py", line 601, in request
    request, auth=auth, allow_redirects=allow_redirects, timeout=timeout,

  File "C:\Anaconda3\lib\site-packages\httpx\_client.py", line 621, in send
    request, auth=auth, timeout=timeout, allow_redirects=allow_redirects,

  File "C:\Anaconda3\lib\site-packages\httpx\_client.py", line 648, in send_handling_redirects
    request, auth=auth, timeout=timeout, history=history

  File "C:\Anaconda3\lib\site-packages\httpx\_client.py", line 684, in send_handling_auth
    response = self.send_single_request(request, timeout)

  File "C:\Anaconda3\lib\site-packages\httpx\_client.py", line 719, in send_single_request
    timeout=timeout.as_dict(),

  File "C:\Anaconda3\lib\site-packages\httpcore\_sync\connection_pool.py", line 153, in request
    method, url, headers=headers, stream=stream, timeout=timeout

  File "C:\Anaconda3\lib\site-packages\httpcore\_sync\connection.py", line 78, in request
    return self.connection.request(method, url, headers, stream, timeout)

  File "C:\Anaconda3\lib\site-packages\httpcore\_sync\http11.py", line 62, in request
    ) = self._receive_response(timeout)

  File "C:\Anaconda3\lib\site-packages\httpcore\_sync\http11.py", line 115, in _receive_response
    event = self._receive_event(timeout)

  File "C:\Anaconda3\lib\site-packages\httpcore\_sync\http11.py", line 145, in _receive_event
    data = self.socket.read(self.READ_NUM_BYTES, timeout)

  File "C:\Anaconda3\lib\site-packages\httpcore\_backends\sync.py", line 62, in read
    return self.sock.recv(n)

  File "C:\Anaconda3\lib\contextlib.py", line 130, in __exit__
    self.gen.throw(type, value, traceback)

  File "C:\Anaconda3\lib\site-packages\httpcore\_exceptions.py", line 12, in map_exceptions
    raise to_exc(exc) from None

ReadTimeout: The read operation timed out

我的机器:16 GB 内存(i5 + NVIDIA); 谷歌 Colab 内存:0.87 GB/12.72 GB

# Data Size
len(df) : 1800

不知道为什么它不在我的本地机器上运行?我以前研究过更重的数据集。 我正在使用 Python 3 (Spyder 4.0)。

【问题讨论】:

    标签: python-3.x google-colaboratory google-translate


    【解决方案1】:

    我在翻译时也遇到了一些问题...看来您遇到的错误与您的机器无关,而是对 API 的请求超时。尝试将Timeout 对象从httpx 库传递给Translator 构建器。像这样的:

    import httpx
    timeout = httpx.Timeout(5) # 5 seconds timeout
    translator = Translator(timeout=timeout)
    

    如果需要,您可以将 5 更改为另一个值。到目前为止,它为我解决了问题。

    【讨论】:

    • 我也面临同样的问题并尝试了您的解决方案,但再次出现超时错误。你能告诉我我们应该在哪里添加这两行代码(在导入之后开始还是在最后)?