python:为什么diff进程在调用select.epoll()时会返回相同的epoll对象

时间:2016-05-29 14:12:02

标签: python multiprocessing epoll

我的目标:启动N个子进程,每个进程处理不同的套接字集。 - 这意味着需要不同的epoll对象 Porblem :当我在子流程中调用select.epoll()时,它返回相同的对象。
这是一个简单的例子:

from multiprocessing import Process,Lock
import time,select,os

class A(Process):
    def run(self):
        fd = select.epoll()
        print 'A.pid=',os.getpid(),'poll_fd:', fd, fd.fileno()
        while 1:
            poll_list = fd.poll(timeout=3600)
            for fd,events in poll_list:
                pass

class B(Process):
    def run(self):
        fd = select.epoll()
        print 'B.pid=',os.getpid(),'poll_fd:', fd, fd.fileno()
        while 1:
            poll_list = fd.poll(timeout=3600)
            for fd,events in poll_list:
                pass

A().start()
B().start()

为什么会这样? 我该怎么做才能解决它? 任何帮助将不胜感激。?

1 个答案:

答案 0 :(得分:0)

由于这是不同的过程,因此epoll资源也不同。每个进程都有自己的文件编号集。为新资源选择最低的空闲文件编号。这就是两个进程使用相同文件号的原因。无需修复。