2011-02-06 18 views
2

私はcouchDbインスタンスへのリンクをスラッグするために以下のコードを使用しています。データベースが遅い場合、GUIに何が起こるかをテストできます。このコードで何が問題になっていますか?

# coding=utf8 slowCoach.py - a server that delays every message 
#  thus making the database crawl. 
import eventlet 
from time import sleep 
def closed_callback(): 
    print "called back" 
def forward(source, dest, cb = lambda: None): 
    """Forwards bytes unidirectionally from source to dest""" 
    while True: 
     d = source.recv(32384) 
     if d == '': 
      cb() 
      break 
     sleep(0.3)  
     dest.sendall(d) 
listener = eventlet.listen(('localhost', 5981)) 
while True: 
    client, addr = listener.accept() 
    server = eventlet.connect(('192.168.0.1',5984)) 
    # two unidirectional forwarders make a bidirectional one 
    eventlet.spawn_n(forward, client, server, closed_callback) 
    eventlet.spawn_n(forward, server, client) 

コードは、ポートフォワーダの例に基づいています。

ドキュメントを読み込んだり、削除したり、更新したりするときに正常に動作しますが、GUIを挿入するとハングします。上記のコードを抜けて直接リンクすると、インサートはうまく動作します!データベースに話している

ザ・PythonコードはCouchDBの-pythonの(http://code.google.com/p/couchdb-python/)で、保存して挿入し、次の両方の文

try: 
     self.db.save(dic) 
    except couchdb.ResourceConflict: # wrong _rev - updated by someone else 
     return False 
    for fld in ['_id','_rev']: # set id and rev to current values 
     value = dic[fld] 
     setattr(self, fld, value) 
    self._status = CouchObject.CLEAN 
    return self 
を実行します

しかし、一方は動作し、他方は動作しません。誰にどのようにこれをデバッグするか、または何が間違っているかもしれないかについてのヒントはありますか?

+0

私自身の質問に答えるために、私はイベントレットから睡眠を取り込むべきでした。それがなければ、緑色の糸はロックし、物は失われます。私はまた、最後に受信する前に、次のメッセージをソファに送った発信者にも同様の問題がありました。 – Ian

+0

自分の質問には、コメントにはない回答のセクションに答えてください。このようにして、あなたはあなたの問題を解決し、多分自己学習者のバッジを撃つことが明らかです! – Rod

+0

また、質問はcouchdbの質問のリストに未回答として表示されません。しかし、将来の読者のために、答えを加えるためにここに戻ってくれてありがとう、ありがとう。 – rossdavidh

答えて

1

イアンは言う:

自分の質問に答えるために - 私はeventletから睡眠を輸入している必要があります。それがなければ、緑色の糸はロックし、物は失われます。私はまた、最後に受信する前に、次のメッセージをソファに送った発信者にも同様の問題がありました。

関連する問題