python 不同子进程为何创建出相同的epoll对象
PHPz
PHPz 2017-04-17 17:49:53
0
1
395

我的目的:不同的进程分别等待不同的socket集合
遇到的问题:我在不同的子进程分别调用 select.epoll(),结果居然返回同一个object!
简单的例子如下:

from multiprocessing import Process,Lock
import time,select

class A(Process):
    def run(self):
        fd = select.epoll()
        print 'A poll_fd:', fd, fd.fileno()
        while 1: time.sleep(3600)

class B(Process):
    def run(self):
        fd = select.epoll()
        print 'B poll_fd:', fd, fd.fileno()
        while 1: time.sleep(3600)

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

运行后输出结果如下:

[root@localhost x]# ./test.py 
A poll_fd: <select.epoll object at 0x7f2c4de49150> 4
B poll_fd: <select.epoll object at 0x7f2c4de49150> 4

一个socket可读写,所有子进程都被唤醒了……
有谁遇到过么?请问怎么解决呢?

PHPz
PHPz

学习是最好的投资!

모든 응답(1)
伊谢尔伦

두 fd의 id와 fileno가 동일하지만, 동일한 객체라는 의미는 아닙니다.

A와 B는 서로 다른 두 프로세스입니다. 두 fd는 서로 다른 프로세스 공간에 속하며 동일하지 않습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿