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

aiofiles 这个库意义何在?

  •  
  •   xiusedelang · 2017-02-26 22:57:02 +08:00 · 6003 次点击
    这是一个创建于 2862 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://github.com/Tinche/aiofiles
    今天蛋疼的看了一眼,发现它把文件操作扔到 asnycio 里面,但是文件的读写模式仍然是 block 的。搞不懂这么干到底有什么意义。我是 python 小白,还请指教一下。
    8 条回复    2017-02-27 14:29:01 +08:00
    neoblackcap
        1
    neoblackcap  
       2017-02-26 23:42:28 +08:00
    不就是封装一个线程池吗?这个不会堵塞主线程,就是这样
    xiusedelang
        2
    xiusedelang  
    OP
       2017-02-26 23:56:41 +08:00 via Android
    @neoblackcap ,对 asyncio 不太了解,我猜测它是用了一个单独线程执行所有协程工作。这样有大量文件 IO 时应该并没有带来多大好处,不过是把阻塞放到另一个线程了。我觉得这个库应该使用 epoll 类的异步 API ,才能完全发挥 asyncio 的优势,但是看看代码好像并没有。
    neoblackcap
        3
    neoblackcap  
       2017-02-27 00:05:45 +08:00
    @xiusedelang epoll 不支持本地 IO,非堵塞只是指不堵塞主线程,除非 Windows ,要不然你要完全用户态线程不堵塞是做不到的,那需要的是异步 IO 接口,内核不支持都没有用
    ryd994
        4
    ryd994  
       2017-02-27 03:11:17 +08:00 via Android
    @neoblackcap POSIX 不是有 aio 么
    @xiusedelang 用的是 coroutine 。但是不会阻塞啊。非阻塞的方法有很多, select poll aio 都行
    xiusedelang
        5
    xiusedelang  
    OP
       2017-02-27 07:31:50 +08:00 via Android
    @neoblackcap epoll 在这里确实不适合,见笑了
    @ryd994 coroutine 里面调用系统的阻塞 API ,还是要阻塞的吧。我觉得这个库应该用你说的这几个非阻塞 API ,但翻了半天代码它的确是用的最普通的阻塞方法。
    tinyproxy
        6
    tinyproxy  
       2017-02-27 09:47:03 +08:00 via iPhone
    你到 stackoverflow 搜搜文件异步 io 的实现方式,线程池是比较简单方便而且平台兼容性比较好的做法。
    fengjianxinghun
        7
    fengjianxinghun  
       2017-02-27 10:54:26 +08:00
    @ryd994 现在的 aio 都是线程实现的。。。
    kuroismith
        8
    kuroismith  
       2017-02-27 14:29:01 +08:00
    感觉没什么意义, 之前测试了一下, 读 100 个文件, aiofiles 比普通的方式还要更慢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2637 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 06:40 · PVG 14:40 · LAX 22:40 · JFK 01:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.