Я использую следующий код, чтобы связать ссылку с экземпляром couchDb, чтобы я мог проверить, что происходит с графическим интерфейсом, если база данных работает медленно.Что не так с этим кодом?
# 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/) и ОБА сохранить и вставить выполнить следующий оператор
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