13

私が今持っているよりも pymongo に関するより多くのドメインの専門知識が必要なここで急ごしらえ:

gevent monkey_patch() を呼び出して、gevent の「非同期」グリーンレット内で r/w での pymongo のブロック動作を正常に変更するために、Python で記述された pymongo ドライバーの「正しい」部分はありますか?

これが gevent と pymongo でもう少し足を運ぶ必要がある場合 - しかしそれは実行可能です - irc について少しのガイダンスを得ることができる限り、私は喜んで時間を割きます.

ありがとう!

注: 小規模な mongo 書き込みでは、ブロックを解除する前に書き込みの「リクエスト」をキューに入れるだけなので、大きな問題にはなりません。しかし、彼のねじれた非同期 mongo ドライバー (https://github.com/fiorix/mongo-async-python-driver) について fiorix と話していると、mongo のクイック書き込み (リクエスト) でさえ、大規模な非同期アプリケーションで問題を引き起こす可能性があります。(そしてもちろん、ノンブロッキング読み取りは最初から問題を引き起こす可能性があります!)

4

2 に答える 2

19

私は Gevent で PyMongo を使用しましたが、注意すべき点がいくつかあります。

  1. pymongo.Connectionオブジェクトを1 つだけインスタンス化し、できればグローバル変数またはモジュール レベル変数としてインスタンス化します。Connectionそれ自体にプールがあるため、これは重要です。
  2. モンキーはすべて、または少なくともソケットとスレッドの両方にパッチを当てます。ではスレッド ローカルを使用しているため、Connectionソケットにパッチを適用するだけでは十分ではありません。
  3. end_request接続をプールに戻すために呼び出すことを忘れないでください。

PyMongo は Gevent で問題なく動作します。

于 2011-08-24T00:39:52.440 に答える
2

最初の検査では、cコードでソケット操作を実行していないように見えるので、問題ないはずです(ブロック操作は、グリーンスレッドをブロックするだけです)。

于 2011-08-23T23:29:31.273 に答える