2011-02-06 47 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挂起时。当我直接链接,错过了上面的代码,插入工作就好!

被谈论到数据库

的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 

然而一个人工作,另一个人不工作。有没有人有任何关于如何调试的提示,或者可能会出错的地方?

+0

要回答我自己的问题 - 我应该从eventlet导入睡眠。如果没有绿色的线程锁定,并且东西丢失了。我也有类似的问题在呼叫者,最后收到之前发送下一条消息到沙发,谁知道谁得到了什么答复! – Ian 2011-02-06 20:18:08

回答

1

伊恩说:

要回答我的问题 - 我应该有进口的睡眠从eventlet。如果没有绿色的线程锁定,并且东西丢失了。我也有类似的问题在呼叫者,最后收到之前发送下一条消息到沙发,谁知道谁得到了什么答复!