• 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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
  • 相关阅读:
    Linux下安装Mysql5.7,超详细完整教程,以及云mysql连接
    【docker】Docker consul的容器服务更新与发现
    删除word文档中的空白页
    Conda 环境迁移
    软件确认测试有什么作用?确认测试报告的价格是多少?
    翻译: 详细图解Transformer多头自注意力机制 Attention Is All You Need
    八大排序(四)--------直接插入排序
    Java对象数组练习
    为什么你做自媒体赚不到钱?今天就教你几招
    【矩阵】54. 螺旋矩阵【中等】
  • 原文地址:https://blog.csdn.net/GreatSimulation/article/details/132833660