sac*_*ruk 6 python rest try-catch google-translate
我有大约 20000 条文本要翻译,每条平均长度约为 100 个字符。我正在使用多处理库来加速我的 API 调用。看起来像下面:
from google.cloud.translate_v2 import Client
from time import sleep
from tqdm.notebook import tqdm
import multiprocessing as mp
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = cred_file
translate_client = Client()
def trans(text, MAX_TRIES=5):
res = None
sleep_time = 1
for i in range(MAX_TRIES):
try:
res = translate_client.translate(text, target_language="en", model="nmt")
error = None
except Exception as error:
pass
if res is None:
sleep(sleep_time) # wait for 1 seconds before trying to fetch the data again
sleep_time *= 2
else:
break
return res["translatedText"]
src_text = # eg. ["this is a sentence"]*20000
with mp.Pool(mp.cpu_count()) as pool:
translated = list(tqdm(pool.imap(trans, src_text), total=len(src_text)))
Run Code Online (Sandbox Code Playgroud)
不幸的是,上面的代码每次都在迭代 2828 +/- 5 左右失败 ( HTTP Error 503: Service Unavailable)。我希望有一个可变的睡眠时间可以让它重新启动并正常运行。奇怪的是,如果我立即重新启动循环,它会再次启动而不会出现问题,即使代码完成执行后已经过去了 < 2^4 秒。所以问题是:
try/except做错了吗?我需要多处理,否则我将等待大约 3 个小时才能完成整个过程。
| 归档时间: |
|
| 查看次数: |
2186 次 |
| 最近记录: |