重要
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 ドライバーで使用できる非同期メソッドのリストを表示するには、 PyMongoからPyMongo Async へのガイドの非同期メソッドセクションを参照してください。
次のセクションでは、 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 ドキュメントを参照してください。