为什么在共享多个进程的侦听套接字时,一个新进程条目然后旧进程的事件停止运行?

2024-06-02 08:40:21 发布

您现在位置:Python中文网/ 问答频道 /正文

这个问题发生在我的代理程序中,考虑到G10K,我在程序中使用gevent,而我使用低级gevent.core文件运行我所有的功能。你知道吗

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

我发现问题是当进程2接受套接字时,进程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()

Tags: 文件coreself程序功能send代理进程
1条回答
网友
1楼 · 发布于 2024-06-02 08:40:21

我认为问题出在代码中,因为this code在使用相同的共享套接字时工作正常。你知道吗

当您接受带有EV\u READ的socket时,您必须获得客户机套接字并释放对主套接字的控制;您不能对其进行写入。您应该使用类似以下代码:

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)

在此之后,设置此套接字的读写事件。你知道吗

相关问题 更多 >