重要
PyMongo异步驱动程序是实验性的,不应在生产环境中使用。在发布完整版本之前,本指南中描述的类、方法和行为可能会发生变化。如果您在使用 PyMongo 异步 时遇到任何问题,可以在 问题和帮助页面上学习如何报告这些问题。
Overview
PyMongo异步驱动程序是PyMongo和 Motor库的统一。在本指南中,您可以了解将应用程序从PyMongo或Motor迁移到PyMongo异步驱动程序时必须进行的更改。
从Motor迁移
PyMongo 异步驱动程序的功能与 Motor 库类似,但由于直接使用 Python Asyncio 而不是将工作委托给线程池,因此可以改善延迟和吞吐量。在大多数情况下,您可以使用 AsyncMongoClient 代替 MotorClient,并将应用程序的导入声明更改为从 pymongo 导入,从而将现有Motor应用程序直接迁移到PyMongo Async。
以下示例显示了在Motor中与PyMongo Async 中使用客户端进行写入操作的导入差异:
# Motor client import from motor.motor_asyncio import AsyncIOMotorClient # PyMongo Async client import from pymongo import AsyncMongoClient
要查看PyMongo Async API中可用的异步方法列表,请参阅 异步方法 部分。要学习;了解与PyMongo对应的Motor版本,请参阅兼容性页面。
以下部分介绍了从Motor迁移到PyMongo异步驱动程序时必须在应用程序中实现的方法签名更改。
方法签名更改
以下Motor方法签名在PyMongo异步驱动程序中的行为有所不同:
AsyncMongoClient.__init__()不接受io_loop参数。AsyncCursor.each()不存在于PyMongo异步驱动程序中。MotorGridOut.stream_to_handler()不存在于PyMongo异步驱动程序中。AsyncCursor.to_list(0)在PyMongo异步驱动程序中无效。请改用to_list(None)。MongoClient是线程安全的,可由多个线程使用,但是,AsyncMongoClient不是线程安全的,只能由单个事件循环使用。
从PyMongo迁移
PyMongo异步驱动程序的行为与PyMongo类似,但所有执行网络操作的方法都是协程,必须等待。要从PyMongo迁移到PyMongo Async,您必须通过以下方式更新代码:
将所有使用的
MongoClient替换为AsyncMongoClient。为所有异步方法调用添加
await关键字。如果在函数内部调用异步方法,请将该函数标记为
async。
以下部分介绍如何实现异步API。
异步方法
下表列出了PyMongo异步驱动程序中可用的异步方法。要调用这些方法,您必须对其进行 await 操作并在 async 函数内进行调用。
客户端方法
方法 | 例子 | |||
|---|---|---|---|---|
| | |||
| | |||
| | |||
| | |||
| | |||
| |
数据库方法
方法 | 例子 | ||
|---|---|---|---|
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| |
集合方法
方法 | 例子 | ||
|---|---|---|---|
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| |
更多信息
要学习;了解有关异步Python 的更多信息,请参阅Python Asyncio 文档。