python 不同子进程为何创建出相同的epoll对象

发布于 2022-09-02 19:47:08 字数 739 浏览 10 评论 0

我的目的:不同的进程分别等待不同的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可读写,所有子进程都被唤醒了……
有谁遇到过么?请问怎么解决呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

(り薆情海 2022-09-09 19:47:08

两个 fd 的 id 和 fileno 相同,不代表他们就是两个相同的对象。

A、B是两个不同进程,两个 fd 分属不同的进程空间,并不一样。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文