2011-02-06 6 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를 삽입하면 중단됩니다. 위의 코드를 빠뜨린 직접 링크를 연결하면 삽입 작업이 잘됩니다! 데이터베이스에 이야기

파이썬 코드는 CouchDB를-파이썬입니다 (http://code.google.com/p/couchdb-python/)와 BOTH 다음 문

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

내 자신의 질문에 대답하려면 - 나는 eventlet에서 수면을 가져 왔어야합니다. 그것없이 녹색 스레드 잠금, 그리고 물건이 손실됩니다. 나는 또한 마지막으로 수신되기 전에 소파에 다음 메시지를 보낸 발신자와 누가 답장을했는지 알 수있는 유사한 문제를 겪었다. – Ian

+0

의견에없는 답변 섹션에서 자신의 질문에 대답해야합니다. 이 방법은 당신이 당신의 문제를 해결하고 스스로 학습자 배지에서 기회를 얻었음이 분명합니다! – Rod

+0

또한 질문은 couchdb 질문 목록에 대답이없는 것으로 나타나지 않습니다. 나중에 독자를 위해서 대답을 추가하기 위해 여기로와 주셔서 감사합니다. – rossdavidh

답변

1

이안는 말한다 :

내 자신의 질문에 대답하기 위해 - 나는 eventlet에서 수입 잠이 있어야합니다. 그것없이 녹색 스레드 잠금, 그리고 물건이 손실됩니다. 나는 또한 마지막으로 수신되기 전에 소파에 다음 메시지를 보낸 발신자와 누가 답장을했는지 알 수있는 유사한 문제를 겪었다.

관련 문제