python协程学习

python 复制代码
import asyncio
import time
import csv
import queue
import aiosqlite
import time

conn = None
# 定义一个队列,用于传递数据
data_queue = queue.Queue()

# 启动写文件
# def callback():
#     await 
#     print(f"执行结果:{future.result()}")
async def get_connection():
    global conn
    if conn is None:
        conn = await aiosqlite.connect('lac_ci.db', check_same_thread=False)  # 在内存中创建一个临时的数据库
    return conn

async def query(row):
   
    lac = row[0]
    ci = row[1]
    
    # print("enter query")
    conn = await get_connection()
    cursor = await conn.execute("SELECT lon,lat,radius FROM LacCiT WHERE lac = ? AND ci = ?",(lac, ci))
    result = await cursor.fetchall()
    # print(result)
    # 获取查询结果的列名
        
    if(len(result)!=0): 
        result = result[0]   
        lat = result[0]
        lon = result[1]
        radius = result[2]
        # 将结果写入
        row.extend([str(lon),str(lat),str(radius)])
        # print(row)
    
    # 将处理后的行放入队列
    data_queue.put(row)
  
# 定义一个函数,用于写入数据到CSV文件
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("队列为空,说明数据已经全部处理完毕")
                break
    
async 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)
    # row_num = reader.line_num
    # print(type(reader))
    tasks = []
    for row in reader:
        task = asyncio.create_task(query(row))
        tasks.append(task)
        
    
    # tasks.append(write_csv(output_file))
    await asyncio.gather(*tasks)
    # done, _ = await asyncio.wait(tasks, return_when=asyncio.FIRST_COMPLETED)
    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() # 返回一个coroutine object

# 进入 event loop
asyncio.run(coro)
相关推荐
2501_930707784 小时前
使用C#代码在 PowerPoint 中组合或取消组合形状
开发语言·c#
晚烛4 小时前
CANN 调试工具与性能剖析:从日志分析到 NPU 行为追踪的完整调试体系
开发语言·windows·python·深度学习·缓存
惊鸿一博5 小时前
图标加载方式_zeroIcon_是否加前缀mdi
开发语言·前端·javascript
森G5 小时前
TypeScript 基础类型
开发语言·typescript
huipeng9266 小时前
企业级微服务开发实战(一):项目启动与工程化设计
java·开发语言·spring boot·spring cloud·微服务·云原生·架构
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ6 小时前
java实现excel导入、下载模板方法
java·开发语言·excel
莫逸雪6 小时前
Nodemo使用学习
学习·编辑器·vim
眠りたいです6 小时前
现代C++:C++14中的新语言特性和库特性
c语言·开发语言·c++
隔壁大炮6 小时前
MNE-Python 第9天学习笔记:源定位基础
python·eeg·mne·脑电数据处理
叶小鸡7 小时前
Java 篇-项目实战-AI 天机学堂(从 0 到 1)-day1
java·开发语言