问题发生在我的代理程序中,考虑到G10K,我在程序中使用gevent,并使用低级gevent.core来运行我的所有功能。
在将程序更改为多个进程之前。一切都好。但是当我改变它时,问题出现了。
我发现问题是当进程NO.2 接受套接字时,进程NO.1的事件将停止发送。如果我在我的活动中添加一个睡眠(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()
答案 0 :(得分:1)
我认为问题出在您的代码中,因为this code工作正常,使用相同的共享套接字。
当您接受带有EV_READ的套接字时,您必须获取客户端套接字并释放对主套接字的控制权;你不能写信给它。您应该使用类似于以下代码的代码:
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事件。