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
然而一个人工作,另一个人不工作。有没有人有任何关于如何调试的提示,或者可能会出错的地方?
要回答我自己的问题 - 我应该从eventlet导入睡眠。如果没有绿色的线程锁定,并且东西丢失了。我也有类似的问题在呼叫者,最后收到之前发送下一条消息到沙发,谁知道谁得到了什么答复! – Ian 2011-02-06 20:18:08