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
herojaxy
V2EX  ›  Python

请问 python 中 epoll 库是线程安全的吗?

  •  1
     
  •   herojaxy · 2015-12-03 14:54:05 +08:00 · 3160 次点击
    这是一个创建于 3279 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近打算使用 epoll 做一个 socket 服务器,具体业务是接收连接请求,然后查询数据库再返回给客户端。
    查询数据库的操作是放到线程池里面执行的,当执行执行完毕要给客户端返回数据时可以直接调用 ep.modify(fileno, select.EPOLLOUT)这句吗,还是得加把锁?
    因为不清楚这个方法是不是线程安全,所以特地来问一下。
    google 了一圈有说安全有说不安全的,有 v2exer 清楚的吗?
    2 条回复    2015-12-04 09:38:05 +08:00
    zhizhongzhiwai
        1
    zhizhongzhiwai  
       2015-12-03 17:58:45 +08:00
    真心建议你用 gevent 。 完全不用考虑这些。
    ryanking8215
        2
    ryanking8215  
       2015-12-04 09:38:05 +08:00
    man epoll, 恕我眼拙,没看到说一定是线程安全的,但是 google 了一圈,发现 cu 里有帖子说是线程安全的。
    不论这个接口是否需要加锁,你的 write buffer 也需要加锁吧,因为处理数据在线程池里,最后收到 POLLOUT 事件要从 write buffer 里取数据发送,这个是在 event loop 线程里做的, write buffer 不是需要加锁吗?一样加锁了,把 ep.modify()也一起加进去就好了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2950 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:17 · PVG 22:17 · LAX 06:17 · JFK 09:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.