新闻详情

新闻详情

首页 / 资讯中心 / 详情

LanceDB Python 从同步 API 迁移到异步 API 完整指南:connect_async 与 AsyncConnection/AsyncTable 实战

发布时间:2026/11/4 18:34:44来源:尧图网络
LanceDB Python 从同步 API 迁移到异步 API 完整指南:connect_async 与 AsyncConnection/AsyncTable 实战
向量数据库数据库人工智能后端【免费下载链接】lancedbDeveloper-friendly OSS embedded retrieval library for multimodal AI. Search More; Manage Less.项目地址https://gitcode.com/gh_mirrors/la/lancedb点击查看免费下载导读LanceDB 为 Python 绑定引入了一套全新的异步 API它直接构建在 rust lancedb crate 之上而非旧版基于 pylance 的同步实现从而让 Python、Node.js 等各语言绑定在行为上保持一致。本篇指南以仓库内 python/ASYNC_MIGRATION.md 为骨架结合 python/python/lancedb/init.py 与 python/python/lancedb/table.py 的源码实现系统讲解同步到异步迁移中的三个核心变化几乎所有方法变为async、Connection/Table新增close与上下文管理器语义、Table.schema由属性变为异步方法以及len(table)的移除。读完本文你将能把现有同步代码平滑迁移为await驱动的异步代码并正确管理连接与表对象的生命周期。一、异步 API 的定位与设计动机异步 API 并不是在同步 API 外面包一层asyncio封装那么简单。从源码看connect_async直接调用 Rust 层的异步入口。在 python/python/lancedb/db.py 中可以看到核心连接逻辑async def do_connect(): return await lancedb_connect( sanitize_uri(uri), None, None, ... )即异步连接通过lancedb_connectRust 导出建立AsyncConnection只是对LanceDbConnection的 Python 包装见 db.py。这意味着各语言绑定Python / Node.js / Java共享同一套 Rust 内核行为一致性更高异步 API 可以直接支持 LanceDB Cloud 的 OAuth 认证connect_async支持oauth_config参数而同步connect对db://URI 仍使用 API Key见init.py。二、核心变化一几乎所有函数都变成 async迁移中最重要的一点几乎所有函数现在返回asyncio协程调用时必须使用await。同步写法import lancedb db lancedb.connect(./.lancedb) table db.open_table(my_table) print(table.schema) print(table.count_rows())异步写法import lancedb async def main(): db await lancedb.connect_async(./.lancedb) table await db.open_table(my_table) print(await table.schema()) print(await table.count_rows()) import asyncio asyncio.run(main())从类型标注也可以直接确认这一变化python/python/lancedb/_lancedb.pyi 中Connection的close是async def close(self)Table的schema是async def schema(self) - pa.Schema、count_rows是async def count_rows(self, filter: Optional[str]) - int见 _lancedb.pyi。也就是说凡是涉及 IO 的操作——打开表、建表、增删改查、建索引、计数——都需要await。三、核心变化二Connection 新增 close 与上下文管理器3.1 为什么要 closeAsyncConnection现在带有一个close方法用于主动eagerly释放底层资源。当前阶段close 主要释放远程连接LanceDB Cloud的 HTTP 连接本地原生连接目前不持有打开的资源但未来可能加入共享缓存、目录服务连接等资源见 db.py 的类文档注释。因此即使你只使用本地连接养成调用close的习惯也是好的实践。3.2 三种关闭方式方式一显式调用closeimport lancedb async def main(): db await lancedb.connect_async(./.lancedb) # ... 使用连接 ... db.close()注意close是同步方法def close(self)见 db.py不需要await且可以安全地多次调用。关闭后再使用连接会抛错。is_open()可以查询连接状态。方式二作为上下文管理器推荐import lancedb async def main(): with await lancedb.connect_async(/tmp/my_dataset) as conn: # do something with the connection pass # conn 在这里已经关闭这一写法来自 db.py 的官方 docstring 示例。AsyncConnection实现了__enter__/__exit__退出上下文时自动调用close见 db.py。方式三依赖垃圾回收调用close并不是强制的。如果不调用连接会在对象被垃圾回收时自动关闭。这也是官方文档明确说明的行为见 ASYNC_MIGRATION.md。3.3 连接的线程与生命周期语义从源码注释可以进一步确认见 db.py连接可以在多线程间共享且预期是长生命周期对象很多场景下一个连接可以在整个应用生命周期内复用此时并不需要每次用完就关闭关闭是可选操作未关闭时对象被删除即自动关闭。四、核心变化三Table 新增 close 与生命周期管理AsyncTable同样提供了close方法用于主动释放 Table 对象持有的索引缓存index data cache。AsyncTable 对象预期是长生命周期、可复用多次操作的它会缓存一定量的索引数据在内存中该缓存会在 Table 被垃圾回收时释放也可以调用close立即释放见 table.py 的类文档注释。同样支持上下文管理器退出上下文自动关闭见 table.pyimport lancedb async def main(): with await lancedb.connect_async(./.lancedb) as db: table await db.open_table(my_table) with table: # ... 使用 table 执行查询 pass # table 在这里已关闭不可再使用注意Table 一旦关闭就不能再进行任何后续操作见 table.py。与连接一样关闭是可选的is_open()可查询状态。五、核心变化四Table.schema 从属性变成异步方法旧版同步 API 中Table.schema是属性property直接读取即可。新异步 API 中schema变成了async 方法必须调用await table.schema()。# 旧写法同步 API schema table.schema # 新写法异步 API schema await table.schema()在 table.py 中AsyncTable.schema被定义为async def schema(self) - pa.Schema返回 Arrow Schema。与之相关的一个常见模式是配合嵌入函数注册表解析 schema 元数据中的嵌入函数from lancedb.embeddings import EmbeddingFunctionRegistry async def get_functions(table): schema await table.schema() return EmbeddingFunctionRegistry.get_instance().parse_functions(schema.metadata)这与 table.py 中AsyncTable.embedding_functions的实现逻辑一致它内部就是先await self.schema()再解析元数据。六、核心变化五len(table) 被移除改用 count_rows同步 API 中可以使用len(table)获取行数新异步 API移除了Table.__len__len(table)不再可用必须改用count_rows# 旧写法同步 API n len(table) # 新写法异步 API n await table.count_rows() # 也支持带过滤条件的计数 n await table.count_rows(filterb 2)AsyncTable.count_rows定义在 table.py签名是async def count_rows(self, filter: Optional[str] None) - int可以传入可选的 SQL 过滤表达式进行条件计数。相应地同步Table抽象基类中的count_rows定义于 table.pypyarrow集成的Dataset适配层也通过self.table.count_rows(self.filter)转发见 python/python/lancedb/integrations/pyarrow.py说明这一语义在同步与异步两条 API 上是统一的。七、迁移速查表同步 APIpylance异步 APIrust lancedb说明lancedb.connect(uri)await lancedb.connect_async(uri)返回AsyncConnectiontable.schema属性await table.schema()属性变 async 方法len(table)await table.count_rows()/await table.count_rows(filter...)__len__已移除无依赖 GCconn.close()/with await connect_async(...) as conn:主动释放远程 HTTP 连接无依赖 GCtable.close()/with table:主动释放索引缓存—conn.is_open()/table.is_open()查询对象是否仍可用八、完整的端到端迁移示例最后给出一个从建表、写数据到查询的完整异步示例综合自 table.py 的官方 docstring 示例import asyncio import lancedb async def create_and_search(): # 1. 建立异步连接作为上下文管理器退出自动 close with await lancedb.connect_async(./.lancedb) as db: # 2. 建表数据为 dict 列表vector 维度需一致 data [{vector: [1.1, 1.2], b: 2}] table await db.create_table(my_table, datadata) print(await table.query().limit(5).to_arrow()) # 输出类似 # vector: fixed_size_listitem: float[2] # b: [[2]] # 3. 追加数据 await table.add([{vector: [0.5, 1.3], b: 4}]) # 4. 向量检索 results await table.vector_search([0.4, 0.4]).select([b, vector]).to_pandas() print(results) # 输出类似 # b vector _distance # 0 4 [0.5, 1.3] 0.82 # 1 2 [1.1, 1.2] 1.13 asyncio.run(create_and_search())如果连接与表都是长生命周期对象也可以选择不关闭交由垃圾回收处理但在 LanceDB Cloud 场景下建议显式close或使用上下文管理器及时释放 HTTP 连接资源。延伸阅读迁移说明原文python/ASYNC_MIGRATION.md异步连接实现python/python/lancedb/db.pyAsyncConnection类位于L1757起异步表实现python/python/lancedb/table.pyAsyncTable类位于L4984起异步入口函数connect_asyncpython/python/lancedb/init.py异步类型桩async def签名全集python/python/lancedb/_lancedb.pyi同步与异步的count_rows语义对齐参考python/python/lancedb/integrations/pyarrow.py赞分享向量数据库数据库人工智能后端【免费下载链接】lancedbDeveloper-friendly OSS embedded retrieval library for multimodal AI. Search More; Manage Less.项目地址https://gitcode.com/gh_mirrors/la/lancedb点击查看免费下载相关推荐WebdriverIO 从同步到异步迁移完整指南SyncAsyncMigration 实战手册WebdriverIO 从同步到异步迁移完整指南SyncAsyncMigration 实战手册 本文基于 WebdriverIO 官方迁移文档 SyncAs测试质量保障Meteor 2.8 迁移指南MongoDB 异步 API 与 Meteor.callAsync 完整实战Meteor 2.8 迁移指南MongoDB 异步 API 与 Meteor.callAsync 完整实战 Meteor 2.8 是 Meteor 从基于 F后端前端开发工具移动开发Meteor 3 异步函数完全指南从回调到 Promise 的 API 迁移实战Meteor 3 异步函数完全指南从回调到 Promise 的 API 迁移实战 Meteor 3 将 Promise 作为所有异步操作的标准 API大量回后端前端开发工具移动开发创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/4 15:56:54

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/3 12:09:35

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/4 17:01:23

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/4 12:33:12

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/4 1:25:31

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/4 3:51:11

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉