<p>正如在其他答案中提到的,调用阻塞函数对于ayncio是无用的。在这种情况下,我建议您使用<a href="https://pypi.org/project/google-cloud-translate/" rel="nofollow noreferrer">^{<cd1>}</a>,这是谷歌的官方翻译库</p>
<p>您可以在当前库中执行类似操作:</p>
<pre class="lang-py prettyprint-override"><code>async def do_task(word):
return translator.translate(word, ...)
def main():
# Create translator
...
asyncio.gather(do_task(word) for word in [])
</code></pre>
<p>但这将以相同的方式运行任务,而不使用asyncio。asyncio的真正好处是,当某个东西挂起或等待时,它可以做其他事情。例如,在等待服务器的响应时,它可以发送另一个请求</p>
<p>Python如何知道某些工作正在等待完成?仅当函数(此处为coroutine)通过<code>await</code>关键字通知事件循环时。因此,您肯定需要使用本机支持异步操作的库。上面提到的<code>google-cloud-translate</code>就是这样一个库。你可以做:</p>
<pre><code>from google.cloud import translate
async def main():
# Async-supported google translator client
client = translate.TranslationServiceAsyncClient()
words = ['partying', 'sightseeing', 'sleeping', 'catering']
results = await asyncio.gather(*[client.translate_text(parent=f"projects/{project_name}", contents=[word], source_language_code="en", target_language_code="es") for word in words])
print(results)
asyncio.run(main())
</code></pre>
<p>您可以看到,这个客户机实际上将字符串列表作为输入,因此您可以直接在这里传递字符串列表。根据<a href="https://cloud.google.com/translate/docs/reference/rest/v3/projects/translateText" rel="nofollow noreferrer">docs</a>,这一限制是1024。所以,如果你的列表更大,你必须使用这个for循环</p>
<p>但是,您可能必须为此客户端设置凭据等,这超出了此问题的范围</p>