私は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
を実行します
しかし、一方は動作し、他方は動作しません。誰にどのようにこれをデバッグするか、または何が間違っているかもしれないかについてのヒントはありますか?
私自身の質問に答えるために、私はイベントレットから睡眠を取り込むべきでした。それがなければ、緑色の糸はロックし、物は失われます。私はまた、最後に受信する前に、次のメッセージをソファに送った発信者にも同様の問題がありました。 – Ian
自分の質問には、コメントにはない回答のセクションに答えてください。このようにして、あなたはあなたの問題を解決し、多分自己学習者のバッジを撃つことが明らかです! – Rod
また、質問はcouchdbの質問のリストに未回答として表示されません。しかし、将来の読者のために、答えを加えるためにここに戻ってくれてありがとう、ありがとう。 – rossdavidh