Что не так с этим кодом? - PullRequest
       2

Что не так с этим кодом?

2 голосов
/ 06 февраля 2011

Я использую приведенный ниже код для удаления ссылки на экземпляр 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)

Код основан на примере переадресации портов.

Это работает, как и ожидалось, когда я читаю, удаляю и обновляю документ, но когда я вставляю графический интерфейс зависает. Когда я ссылаюсь напрямую, пропуская приведенный выше код, вставки работают просто отлично!

Код 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

И все же один работает, а другой нет. У кого-нибудь есть подсказка, как это отладить, или что может быть не так?

1 Ответ

1 голос
/ 09 февраля 2011

Ян говорит:

Чтобы ответить на мой собственный вопрос - я должен был импортировать сон из eventlet. Без этого зеленые нити блокируются, и вещи теряются. У меня также была похожая проблема с вызывающим абонентом, который отправил следующее сообщение на диван перед последним получением, и кто знает, кто получил, какой ответ!

...