我有一个超过2000万行的文本文件,格式如下:
ABC123456|fname1 lname1|fname2 lname2
.
.
.
.
我的任务是逐行读取文件,并将这两个名称都发送给Google音译API,然后在终端机(linux)上打印结果。下面是我的代码:
import asyncio
import urllib.parse
from aiohttp import ClientSession
async def getResponse(url):
async with ClientSession() as session:
async with session.get(url) as response:
response = await response.read()
print(response)
loop = asyncio.get_event_loop()
tasks = []
# I'm using test server localhost, but you can use any url
url = "https://www.google.com/inputtools/request?{}"
for line in open('tg.txt'):
vdata = line.split("|")
if len(vdata) == 3:
names = vdata[1]+"_"+vdata[2]
tdata = {"text":names,"ime":"transliteration_en_te"}
qstring = urllib.parse.urlencode(tdata)
task = asyncio.ensure_future(getResponse(url.format(qstring)))
tasks.append(task)
loop.run_until_complete(asyncio.wait(tasks))
在上面的代码中,我的文件tg.txt
包含20+百万行。当我运行它时,我的笔记本电脑死机了,我必须硬重启它。但是,当我使用只有10行的另一个文件tg1.txt
时,此代码可以正常工作。我想念什么?
答案 0 :(得分:1)
您可以尝试使用<Snake>:
size_hint: None, None
size: 15, 15
canvas:
Color:
rgba: 1, 0, 0, 1
Rectangle:
pos: self.pos
size: self.size
on_touch_down: self.move()
代替asyncio.gather(*futures)
。
另外,请尝试使用固定大小的批次(例如,每批次10行)执行此操作,并在每个已处理的批次之后添加打印,这应该有助于您调试应用。
另外,您的未来可能会以不同的顺序完成,最好在完成批处理后存储收集的结果并打印出来。