2012-02-08 14 views
3

次のコードは、python2.6またはpython3.2で動作しません。pymongoがマルチスレッドで動作しない

テストコード:

import pymongo 

class A(Thread): 
     def __init__(self): 
      Thread.__init__(self) 
      self.conn = pymongo.Connection('localhost',30000) 
      self.mongo = self.conn.puppet 
      self.mongo.authenticate('test','123') 
     def run(self): 
      print self.mongo.href.find_one() 

A().start() 

例外メッセージ:

OperationFailure: database error: unauthorized db:puppet lock 
    type:-1 client:127.0.0.1 

任意のアイデアこの問題を解決するにはどのように?

+0

もちろん、私のmongodbが起動しています。私はマルチスレッドなしでそれをテストし、すべてうまく動作します。 – adamsmith

答えて

3

これはおそらく、pymongoで認証がどのように処理されるかによって決まります。note in the API docs - Pymongoはスレッド間で認証資格情報をキャッシュしないため、各スレッドは個別に認証する必要があります。

+0

ええ、「各スレッドは個別に認証する必要があります」ということは、私がしたことです。そして今私はそれが同時に認証とマルチスレッドを使用することができないバグだと考えています。 – adamsmith

+0

私は自分のコードがPymongo APIに準拠していると信じています。私は自分のスレッドで別のインスタンスを使用しています。あなたのアドバイスは本当に私の問題を解決するものではありません。だから申し訳ありませんが、唯一の答えであっても私はそれを受け入れることができません。 – adamsmith

+0

理解しています - どのバージョンのpymongoとmongoDBを使用していますか? - 2.0リリースでは、最近いくつかの改善がなされています。https://jira.mongodb.org/browse/PYTHON-4 –

関連する問題