但是如果结果必须返回到一个文件,那么甚至可以异步查找吗?
如果您不关心结果的顺序,那么实现异步查找很简单。例如,您可以使用
asyncio.as_completed
要计划所有协同程序并行运行,并在每次完成时收到通知,请执行以下操作:
@asyncio.coroutine
def process():
with open(filename, 'r') as fread:
reader = csv.DictReader(fread, delimiter='|', quoting=csv.QUOTE_NONE)
reader.fieldnames = fieldnamesIn
rows = list(reader)
with open(filenameOut, 'w') as fwrite:
writer = csv.DictWriter(fwrite, fieldnames=fieldnamesOut, delimiter='|')
missingAnswers = 0
loop = asyncio.get_event_loop()
tasks = [loop.create_task(getsip(row['NUM'])) for row in rows]
for done_coro in asyncio.as_completed(tasks):
answer = yield from done_coro
if answer == ""
missingAnswers += 1
writer.writerow({'NUM': row['NUM'], 'SIP': answer})
print("Records not found: %d of total %d records"
% (missingAnswers, len(rows)))
loop = asyncio.get_event_loop()
loop.run_until_complete(process())