import asyncio
import time
import csv
import queue
import aiosqlite
import timeconn = None
data_queue = queue.Queue()
async def get_connection():global connif conn is None:conn = await aiosqlite.connect('lac_ci.db', check_same_thread=False) return connasync def query(row):lac = row[0]ci = row[1]conn = await get_connection()cursor = await conn.execute("SELECT lon,lat,radius FROM LacCiT WHERE lac = ? AND ci = ?",(lac, ci))result = await cursor.fetchall()if(len(result)!=0): result = result[0] lat = result[0]lon = result[1]radius = result[2]row.extend([str(lon),str(lat),str(radius)])data_queue.put(row)
async def write_csv(filename):with open(filename, 'w', newline='') as file:writer = csv.writer(file)while True:try:row = data_queue.get(timeout=1) writer.writerow(row)data_queue.task_done()except queue.Empty:print("队列为空,说明数据已经全部处理完毕")breakasync def main():start_time = time.time() print(f"started at {time.strftime('%X')}")csv_file = 'lac_tt.csv'output_file = 'new_file.csv'file = open(csv_file, 'r', newline='') reader = csv.reader(file)tasks = []for row in reader:task = asyncio.create_task(query(row))tasks.append(task)await asyncio.gather(*tasks)await write_csv(output_file)print(f"finished at {time.strftime('%X')}")end_time = time.time() elapsed_time = end_time - start_time print(f"程序运行时间:{elapsed_time:.2f} 秒")await conn.close()coro = main()
asyncio.run(coro)