python协程学习

SQLite3数据库并发异步解决方案及aiosqlite的应用方法 “单例 + 单写连接 + 小型读连接池”是一种专为异步 SQLite 应用设计的高效数据库访问架构:整个程序只使用一个全局数据库管理器(单例),所有写操作通过同一个写连接加锁串行执行,确保数据安全;而读操作则从一个预创建的小型连接池(如3~5个连接)中借出、用完立即归还,既避免了频繁创建连接的开销,又防止读事务长期占用导致 WAL 文件无法清理。该方案在保证线程/协程安全的同时,实现了高性能、低资源占用和良好的模块解耦,特别适合长期运行的单机数据采集与预测类应用。 阅读详情
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)
python协程学习笔记 语法,可以实现高效的并发处理,适合 I/O 密集型任务(如网络请求、文件读写)而非 CPU 密集型任务。让你在单线程中实现高效并发,非常适合需要处理大量异步 I/O 操作的场景。是 Python 的内置异步 I/O 库,用于编写异步程序。 阅读详情

相关推荐

Python学习:揭秘Python协程

协程是实现并发编程的一种方式。一说并发,肯定想到了多线程 / 多进程模型,没错,多线程 / 多进程,正是解决并发问题的经典模型之一。 协程 ,又称为微线程,它是实现多任务的另一种方式,只不过是比线程更小的执行单元。因为它自带CPU的上下文,这样只要在合适的时机,我们可以把一个协程切换到另一个协程。 通俗的理解: 在一个线程中的某个函数中,我们可以在任何地方保存当前函数的一些临时变量等信息,然后切换到另外一个函数中执行,注意不是通过调用函数的方式做到的 ,并且切换的次数以及什么时候再切换到原来的函数都由开发者

小朱小朱绝不认输的博客 1668

aiosqlite 教程

**aiosqlite** 是一个面向Python 3.8及更高版本的异步SQLite数据库接口库。它为标准的`sqlite3`模块提供了异步支持,允许在AsyncIO事件循环中执行SQLite操作而不会阻塞其他协程。主要特性包括: - 使用单个共享线程处理数据库通信,确保非阻塞执行。 - 提供了与标准`sqlite3`类似的连接和游标方法的异步版本。 - 包含上下文管理器以自动关闭连接和游标。...

gitblog_00556的博客 1080

python 学习协程,安装不了gevent库解决方法:

python 学习协程,安装不了gevent库解决方法: 1.在学习协程,需要用到python第三方库gevent,正常情况我们都是在终端使用command:pip install gevent直接安装。(打开终端方式:windows+R)。 但是不幸的是终端发生了报错: ERROR: Command errored out with exit status 1: ERROR: Failed building wheel for greenlet Failed to build greenlet 2.发

weixin_45536013的博客 6612

探索高效数据库操作:`aiosqlite`

如果你在寻找一个异步、高性能且易于使用的SQLite数据库接口库,那么你的旅程可能会在这里结束。这是一个针对Python的优秀项目,旨在利用Python的asyncio库,为现代异步应用提供无缝的SQLite支持。 ## 项目简介 **aiosqlite** 是一个纯Python实现的SQLite库,它构建于著名的`sqlite3`模块之上,并加入了对异步操作的支持。这意味着你可以并行地执行多...

gitblog_00032的博客 1100

Python协程与机器学习:异步数据预处理的技巧

本文旨在帮助机器学习工程师理解异步编程的核心概念,掌握使用Python协程优化数据预处理的方法。涵盖从基础原理到生产级应用的完整知识体系,适用于图像处理、自然语言处理等需要处理海量数据的场景。我们将从餐厅点餐的类比开始,逐步揭示协程的工作原理,最终实现一个支持实时增强的异步图像处理管道。文中包含可直接复用的代码模板和性能对比数据。协程(Coroutine):可暂停和恢复的特殊函数,像会分身的服务员同时处理多桌点餐事件循环(Event Loop):餐厅的中央调度系统,指挥所有服务员高效协作。

AI Python 编程之道的博客 462

Python中的简单SQL_API_python_代码_下载

SQL 是代码。编写它,对其进行版本控制,对其进行注释,并使用文件运行它。在 Python 程序中将 SQL 代码编写为字符串不允许您在 SQL GUI 或 psql 等 CLI 工具中轻松地重用它们。使用 aiosql,您可以在.sql文件中组织 SQL 语句,将它们作为调用方法加载到 python 应用程序中,而不会像使用任何其他 SQL 文件一样失去使用它们的能力。 该项目支持开箱即用的 SQLite 和 PostgreSQL 的标准和基于异步的驱动程序(sqlite3 , aiosqlite , psycopg , asyncpg )。您可以编写支持其他数据库驱动程序的扩展!

aiosqlite项目常见问题解决方案

**项目介绍**:aiosqlite 是一个开源项目,它为 SQLite 数据库提供了一个异步的接口。这个项目复制了标准 sqlite3 模块的所有功能,但提供了异步版本的连接和游标方法,以及用于自动关闭连接和游标的上下文管理器。这使得在 AsyncIO 事件循环中与 SQLite 数据库的交云不会阻塞其他协程的执行。 **主要编程语言**:该项目主要使用 Python 编程语言开发,兼容 Py...

gitblog_00704的博客 498

Python库 | aiohttp-sqlalchemy-0.13.0.tar.gz

资源分类:Python库 所属语言:Python 资源全名:aiohttp-sqlalchemy-0.13.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.youkuaiyun.com/article/details/101784059

python中用pip安装sqlite_Python aiosqlite包_程序模块 - PyPI - Python中文网

aiosqlite到python 3.5+的标准sqlite3模块的异步桥安装aiosqlite与python 3.5及更新版本兼容。您可以使用以下命令从pypi安装它:$ pip install aiosqlite用法aiosqlite复制标准sqlite3模块,但使用异步版本所有标准连接和游标方法以及自动关闭连接:asyncwithaiosqlite.connect(...)asdb:awai...

weixin_39710561的博客 1566

国产麒麟系统各版本镜像下载

以上各链接均为迅雷下载,禁止商业用途!

2302_79474754的博客 6151

【飞控】PX4 Autopilots与MATLAB/Simulink联合仿真环境搭建全攻略

本文详细介绍了在Windows系统上搭建PX4 Autopilots与MATLAB/Simulink联合仿真环境的完整流程。通过WSL2安装Ubuntu,配置UAV Toolbox支持包,并重点解决了PX4源码克隆、子模块更新等网络难题,最终实现软件在环(SITL)仿真。文章还涵盖了硬件在环(HITL)配置及常见问题排查,为无人机飞控算法开发与测试提供了高效、可靠的解决方案。

weixin_29201933的博客 551

python之协程asyncio的学习

python,async,range断点续传,高并发下载

qq_40978256的博客 2219

PointNet/PointNet++模型调参实战:如何用PyTorch让你的点云分割精度再涨5个点?

本文深入探讨了PointNet/PointNet++模型在点云分割中的调参技巧,通过PyTorch实现精度提升5个点的实战方法。重点分析了点云密度自适应策略、感受野与细节保留的平衡,以及训练加速与稳定性技巧,适用于电力巡检、自动驾驶等场景的激光点云数据处理。

weixin_30836759的博客 477

python 协程学习笔记

python 协程学习笔记

jacke121的专栏 273

Python爬虫实战:抓取统计数据并生成年度对比图表详解

国家统计局网站(静态HTML页面Excel文件JSON接口(部分新版API)我们将重点演示从统计公报页面抓取数据,结合解析Excel文件,实现多种数据格式爬取处理。本文从零开始搭建了一个爬取国家统计数据并制作年度对比图表的完整流程。读者可以根据实际需求调整爬取目标,丰富数据分析维度,甚至结合机器学习模型预测未来趋势。欢迎你在评论区留言分享你的爬虫实践,或提出改进建议!

2201_76125261的博客 1001

CS之攻击菜单详解-后门生成与上线

能够生成如HTA文档、office宏、payload生成器、exe程序。 windows可执行程序exe 可以看到能生成两种windows可执行程序,其分别代表stage分阶段和unstage(stageless)不分阶段。传送门 ——>Cobalt Strike中payload的stage与unstage区别 选择监听器后,按需生成不同类型的exe 然后在目标机器运行即可上线 payload生成器 选择生成如下类型的后门 ——>https://che...

渗透之路,攻防之间皆学问 6808

python爬虫之 asyncio异步协程学习

python爬虫之 asyncio异步协程学习 导包 import asyncio import aiohttp 第一步:创建一个特殊的函数 async def get_request(url): 被 async 修饰的函数就是一个特殊函数,有一下特性: 该函数被调用,不会立即执行 函数被调用后返回一个协程对象 第二步:协程对象 调用特殊函数就会返回一个协程对象 c = get_request(url) # 这里变量c 就是一个协程对象 第三步:任务对象(高级的协程对象) 利用协程对象( c )

TTXSDEKK的博客 449

海康VisionMaster与西门子PLC1200进行S7通信

通信是连通算法平台和外部设备的重要渠道,在海康VisionMaster算法平台中既支持外部数据的读入也支持数据的写出,当通信构建起来以后既可以把软件处理结果发送给外界,又可以通过外界发送字符来触发相机拍照或者软件运行。 本文以西门子PLC1200作为外部设备为例,讲解海康VisionMaster与西门子PLC1200进行S7通信。......

haier123888的博客 1万+

Python协程学习笔记

适用场景:协程优先用于I/O密集型任务(如网络请求、文件读写),CPU密集型需结合进程池;核心关键字async def(定义协程)、await(挂起协程);版本推荐:Python 3.7+使用简化代码;同步与通信:通过通信,实现同步。

2503_92739857的博客 883

手把手教你学Simulink--基础储能管理场景实例:基于Simulink的扩展卡尔曼滤波(EKF)SOC估计算法仿真

本文介绍了基于Simulink的扩展卡尔曼滤波(EKF)在电池SOC估算中的应用。通过Thevenin等效电路建立非线性电池模型,详细阐述了EKF的状态预测和更新过程。在Simulink中搭建了完整的仿真系统,包括电池模型、EKF核心算法模块和误差分析模块。通过脉冲放电和变电流充放电两种工况测试,验证了EKF算法在短期误差(<0.8%)、长期累积误差(<1.5%)和动态响应时间(30ms)方面的优越性能,相比传统安时积分法显著提高了估算精度。文章还提出了自适应EKF、多模型融合等进阶优化方向,为

MHD0815的博客 100

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

python协程学习路径

最近在学习python的协程,将自己在学习过程中遇到的比较好的资料记录下来,希望能帮到更多人 生成器、迭代器、可迭代对象: https://nvie.com/posts/iterators-vs-generators/ asyncio: 英文:https://www.educative.io/blog/python-concurrency-making-sense-of-asyncio 英文:https://realpython.com/async-io-python/ 中文:https://zhuanl

MacwinWin的博客 263

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Python学习系列之协程

一、重温进程&amp;线程 对操作系统来说,线程是最小的执行单元,进程是最小的资源管理单元。 进程是系统分配资源的最小单位 线程是CPU调度的最小单位 由于默认进程内只有一个线程,所以多核CPU处理多进程就像是一个进程一个核心 进程是系统资源分配的最小单位, 系统由一个个进程(程序)组成 一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stac...

answer3lin的博客 4257

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Python学习之-协程

在Python中,协程(coroutines)是利用生成器(generator)的特性,来实现并发编程的一种方式。从Python 3.5开始,通过引入async和await关键字,Python对异步IO提供了更原生的支持,使得协程成为了实现异步编程的首选方式。协程提供了比线程更轻量级的并发,它们在单线程内执行,但在等待IO操作(如网络请求、数据库查询等)的同时,可以让出控制权,这样CPU就可以去做其他的计算任务,提高了程序的执行效率和响应速度。

Summer的博客 1863

python协程基础学习

python协程基础学习

weixin_48276319的博客 329
上一篇: 根据基站位置区识别码(LCA)和小区识别(CI)获取经纬度
下一篇: python多线程学
groundnut888
博客等级 码龄6年 59粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值