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