重要
Overview
PyMongo Async ドライバーは、 PyMongoと Motorライブラリ の統合です。このガイドでは、アプリケーションをPyMongoまたはMotorからPyMongo Async ドライバーに移行するために行う必要がある変更を識別できます。
Motorから移行
PyMongo Async ドライバーはMotorライブラリと同様に機能しますが、スレッド プールに作業を委任するのではなくPython Asyncio を直接使用するため、レイテンシとスループットの向上が可能です。 ほとんどの場合、MotorClient の代わりに AsyncMongoClient を使用し、アプリケーションのインポート ステートメントを pymongo からインポートするように変更することで、既存のMotorアプリケーションをPyMongo Async に直接移行できます。
次の例は、 Motorでの読み取りおよび書込み (write) 操作にクライアントを使用するためのインポートにおける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 Async ドライバーに移行するときにアプリケーションに実装する必要があるメソッド署名の変更を示します。
メソッド署名の変更
PyMongo Async ドライバーでは、次のMotorメソッド署名の動作が異なります。
AsyncMongoClient.__init__()はio_loopパラメータを受け入れません。AsyncCursor.each()はPyMongo Async ドライバーには存在しません。MotorGridOut.stream_to_handler()はPyMongo Async ドライバーには存在しません。AsyncCursor.to_list(0)はPyMongo Async ドライバーでは有効ではありません。 代わりにto_list(None)を使用してください。MongoClientはスレッドセーフであり、多くのスレッドで使用できますが、AsyncMongoClientはスレッドセーフではないため、単一のイベントループでのみ使用する必要があります。
PyMongoからの移行
PyMongo Async ドライバーはPyMongoと同様に動作しますが、ネットワーク操作を実行するすべてのメソッドはコルーチンであり、待機する必要があります。PyMongoからPyMongo Async に移行するには、次の方法でコードを更新する必要があります。
MongoClientのすべての使用をAsyncMongoClientに置き換えます。すべての非同期メソッド呼び出しに
awaitキーワードを追加します。関数内で非同期メソッドを呼び出す場合は、その関数を
asyncとしてマークします。
次のセクションでは、非同期APIを実装する方法について説明します。
非同期メソッド
次の表は、 PyMongo Async ドライバーで使用できる非同期メソッドを示しています。 これらのメソッドを呼び出すには、それらをawaitして、async 関数内で呼び出す必要があります。
クライアント メソッド
方式 | 例 | |||
|---|---|---|---|---|
| | |||
| | |||
| | |||
| | |||
| | |||
| |
データベース メソッド
方式 | 例 | ||
|---|---|---|---|
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| |
コレクション メソッド
方式 | 例 | ||
|---|---|---|---|
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| |
詳細情報
非同期Pythonの詳細については、Python Asyncio ドキュメントを参照してください。