0

问题发生在我的代理程序中,考虑到 G10K,我在我的程序中使用 gevent,我使用低级 gevent.core 来运行我的所有功能。

在我将程序更改为多个进程之前。一切都好。但是当我改变它时,问题就出现了。

我发现问题是当进程 NO.2接受套接字时,进程 NO.1 的事件将停止调度。如果我在我的事件中添加一个 sleep(0.1) ,那么就会有一个惊喜。但是我降低了睡眠时间,问题又出现了。

这个问题困扰了我一个星期,仍然与此无关,有人可以帮助我吗?

我使用这样的事件:

    core.init()
    self.ent_s_send = core.event(core.EV_WRITE,self.conn.fileno(),\
                            self.ser_send,[self.conn,self.body])
    self.ent_s_send.add()
    core.dispatch()
4

1 回答 1

1

我认为问题出在您的代码中,因为此代码使用相同的共享套接字运行良好。

当你接受带有 EV_READ 的 sa 套接字时,你必须获取客户端套接字并释放对主套接字的控制;你不能写信给它。您应该使用类似于以下的代码:

try:
    client_socket, address = sock.accept()
except socket.error, err:
    if err[0] == errno.EAGAIN:
        sys.exc_clear()
        return
    raise
core.event(core.EV_READ, client_socket.fileno(), callback)
core.event(core.EV_WRITE, client_socket.fileno(), callback)
core.event(core.EV_READ | core.EV_WRITE, client_socket.fileno(), callback)

在此之后,为此套接字设置 READ 和 WRITE 事件。

于 2011-09-15T18:50:21.253 回答