V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
aladdindingding
V2EX  ›  Python

为什么 gevent 没有封装 epoll 呢,看只实现了 poll 和 select

  •  
  •   aladdindingding · 2021-05-18 15:48:50 +08:00 · 2430 次点击
    这是一个创建于 1278 天前的主题,其中的信息可能已经有所发展或是发生改变。
    之前用 select 实现的总是有文件描述符限制,改了 ulimi 改打了做并发测试的时候还是会出现。
    使用系统的 epoll 行么,会不会有阻塞
    13 条回复    2021-05-21 18:31:17 +08:00
    aladdindingding
        1
    aladdindingding  
    OP
       2021-05-18 15:49:28 +08:00
    aladdindingding
        2
    aladdindingding  
    OP
       2021-05-18 15:50:34 +08:00
    更改了 ulimit 但是自己做并发测试还是会出现,既然 epoll 是 io 多路复用的方式,为啥 gevent 没有实现呢
    neoblackcap
        3
    neoblackcap  
       2021-05-18 16:32:58 +08:00
    你问什么堵塞? IO 多路复用都会堵塞主线程
    neoblackcap
        4
    neoblackcap  
       2021-05-18 16:35:25 +08:00
    @neoblackcap 修正,都是同步非堵塞。至于 epoll,可以尝试直接使用标准库里面的 asyncio
    wwqgtxx
        5
    wwqgtxx  
       2021-05-18 17:02:40 +08:00 via iPhone
    gevent 目前版本底层是用 libev/libuv 实现的,并不会使用系统 select,建议附上代码给大家复现一下
    ch2
        6
    ch2  
       2021-05-18 17:03:16 +08:00
    你可以用 select.epoll
    monkeyNik
        7
    monkeyNik  
       2021-05-18 17:05:37 +08:00
    你可以来换我的库~封装了 select 、epoll 、kqueue
    aladdindingding
        8
    aladdindingding  
    OP
       2021-05-18 17:34:03 +08:00
    @neoblackcap python2 的项目,只能用 gevent 。用 asyncio 方便多了
    aladdindingding
        9
    aladdindingding  
    OP
       2021-05-18 17:34:21 +08:00
    @monkeyNik 大佬贴个地址呗
    aladdindingding
        10
    aladdindingding  
    OP
       2021-05-18 17:37:40 +08:00
    @wwqgtxx 主要是写代理,gevent 起了个 server 用户请求过来转发连接目标网站,目标网站有返回就立即写回给用户,之前这里的实现就是 gevent 的 select 一直遍历,看哪些有返回就写回给用户。
    monkeyNik
        11
    monkeyNik  
       2021-05-18 18:17:56 +08:00
    @aladdindingding https://github.com/Water-Melon/Melon 有问题或者意见反馈可以加 QQ 群:756582294
    julyclyde
        12
    julyclyde  
       2021-05-21 17:19:32 +08:00
    1 你用 epoll 还是 poll 都不影响出打开文件数的限制
    2 你先确定一下是打开文件数限制还是 poll 的 fd 数限制

    3 ulimit 我猜你用错了 http://julyclyde.org/?p=578
    aladdindingding
        13
    aladdindingding  
    OP
       2021-05-21 18:31:17 +08:00
    @julyclyde 用的 gevent select,并发量大的情况下就会出现 select out of range
    贴出的文档先 mark 了 下来研究
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2908 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:24 · PVG 22:24 · LAX 06:24 · JFK 09:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.