PyMongo Async への移行
重要
PyMongo Async ドライバーは実験的なものであり、本番環境では使用しないでください。 このガイドで説明されているクラス、メソッド、および動作は、完全なリリースより前に変更される可能性があります。 PyMongo Async で問題が発生した場合は、[ 問題とヘルプ ] ページでその問題を報告する方法について学びます。
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 ドキュメントを参照してください。