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

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

3 ulimit 我猜你用错了 http://julyclyde.org/?p=578
aladdindingding
2021-05-21 18:31:17 +08:00
@julyclyde 用的 gevent select,并发量大的情况下就会出现 select out of range
贴出的文档先 mark 了 下来研究

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/777704

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX