数据量比较大,所以多线程谷歌翻译,但是输出不是按数据表的顺便输出,是乱序,该怎么让他顺序输出呢?

from google_trans_new import google_translator
from multiprocessing.dummy import Pool as ThreadPool
import time
import re

"""
此版本调用最新版google_trans_new
使用多线程访问谷歌翻译接口
"""


class Translate(object):
   def __init__(self):
      # 初始化翻译文本路径以及翻译目标语言
      self.txt_file = './all_jobtitles.txt'
      self.aim_language = 'zh-CN'

   def translate(self, text):
      if text:
         aim_lang = self.aim_language
         try:
            t = google_translator(timeout=10)
            translate_text = t.translate(text, aim_lang)
            print(translate_text)
            return translate_text
         except Exception as e:
            return e
            print(e)

def main():
   time1 = time.time()
   # 开启八条线程
   pool = ThreadPool(8)
   trans = Translate()
   txt = trans.read_txt()
   try:
      pool.map(trans.translate, txt)
   except Exception as e:
      raise e
   pool.close()
   pool.join()
   time2 = time.time()
   print("一共翻译了 {} 个句子,消耗了 {:.2f} s".format(len(txt), time2 - time1))



if __name__ == "__main__":
   main()

多线程本来就是不保证顺序的。假如你的数据量不是特别大的话(我看貌似你将所有文字存到了一个数组里面?`txt = trans.read_txt()`),你可以读取的时候将数据读到一个map里面,key就是行号(读取的时候弄个counter),value是一个map --- {"original": 原文本, "translated": 翻译文本},翻译的时候不输出只修改该map,全部翻译完之后统一输出。