python - 这段代码有什么问题?

标签 python eventlet

我正在使用下面的代码插入到 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 导休眠眠。没有它,绿色线程就会锁定,东西就会丢失。我在调用者中也遇到了类似的问题,它在上次收到消息之前将下一条消息发送到沙发上,谁知道谁得到了什么回复!

关于python - 这段代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4915629/

相关文章:

python - 将列表字典展平为数据框

Python setup.py 安装抛出 zipimport.ZipImportError

使用Eventlet进行Python套接字多次调用

python - 如何为异步 gunicorn worker 使用 eventlet 库

python - 使用scrapy在没有javascript代码的情况下抓取文本

python:具有多态性的类属性/变量继承?

python - 是否可以将 .exe 文件转换为 .py?

javascript - 无法初始化并发 websocket 连接 [eventlet、Flask、javascript]

python - Cassandra 未完成与 EventletConnection 的连接

python - 如何结合 multiprocessing 和 eventlet