0

Celery を使用して多くの非同期タスクを実行するアプリケーションで、pymongo を使用して mongodb にアクセスしています。私はpymongoの接続プーリングが非同期ワーカーをサポートしていないことを知っています(ドキュメントに基づく)。

コレクションにアクセスするために、アプリケーションに適合する特定のロジックをラップする Collection クラスがあります。このラッパーで継承したいくつかのコードを理解しようとしています:

  • 現時点では、各コレクションは独自の Connection インスタンスを作成します。私が読んでいるものに基づいて、これは間違っています。実際には、(settings.py などに) 単一の Connection インスタンスがあり、それを Collection インスタンスにインポートする必要があります。そのビットは明らかです。推奨される最大接続数に関するガイドラインはありますか? 現在のコードは、プーリング機能を実際に利用していないため、確実に多くの接続/ソケットを作成します。

  • ただし、一部のコードは非同期のセロリ タスクと同期実行の両方から呼び出されるため、これを処理する方法がわかりません。私の考えは、タスクの新しい接続インスタンスをインスタンス化し、同期のものに単一のインスタンスを使用することです(もちろん、各アクティビティが完了した後のending_request)。これは正しい方向ですか?

ありがとう!

ハレル

4

1 に答える 1

0

pymongo のドキュメントから:

あなたの状況での「非同期」という言葉は、アプリケーションがどのように「一貫性のない」要件を持っているかに翻訳できます。

"x += 1" のようなステートメントは、アプリ内で一貫したものになることはありません。これだけ余裕があれば問題ありません。「重要な」操作がある場合は、何らかの方法で同期用のロックを実装する必要があります。

最大接続数については、正確な数がわからないので、テストして続行してください。

速度とメモリ効率が必要な場合は、Redisとこのもご覧ください。私が作成したいくつかのベンチマークから、Redis python ドライバーは、読み取り/書き込みに関して、pymongo よりも少なくとも 2 倍高速です。

于 2011-09-17T00:03:30.103 に答える