아래의 코드를 사용하여 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
을 실행 저장 및 삽입
아직 작동하고 다른 하나는 작동하지 않습니다. 누구든지 이것을 디버깅하는 방법에 대한 힌트를 갖고 있습니까? 아니면 잘못 될 수 있습니다.
내 자신의 질문에 대답하려면 - 나는 eventlet에서 수면을 가져 왔어야합니다. 그것없이 녹색 스레드 잠금, 그리고 물건이 손실됩니다. 나는 또한 마지막으로 수신되기 전에 소파에 다음 메시지를 보낸 발신자와 누가 답장을했는지 알 수있는 유사한 문제를 겪었다. – Ian
의견에없는 답변 섹션에서 자신의 질문에 대답해야합니다. 이 방법은 당신이 당신의 문제를 해결하고 스스로 학습자 배지에서 기회를 얻었음이 분명합니다! – Rod
또한 질문은 couchdb 질문 목록에 대답이없는 것으로 나타나지 않습니다. 나중에 독자를 위해서 대답을 추가하기 위해 여기로와 주셔서 감사합니다. – rossdavidh