python eventlet-文件异步(非阻塞)io
根据: 我知道这里的非阻塞I/O涵盖了与套接字交互时的情况。eventlet对套接字进行绿化/修补后,套接字连接将变为非阻塞连接 我的问题是:这里的非阻塞I/O是否也包括文件I/O 不,那也可以python eventlet-文件异步(非阻塞)io,python,eventlet,Python,Eventlet,根据: 我知道这里的非阻塞I/O涵盖了与套接字交互时的情况。eventlet对套接字进行绿化/修补后,套接字连接将变为非阻塞连接 我的问题是:这里的非阻塞I/O是否也包括文件I/O 不,那也可以 带回调的真正异步IO:施加意外的限制;不过在Windows和FreeBSD上表现不错 非阻塞IO:禁用文件系统缓存(至少在Linux和FreeBSD上),但仍不能保证文件IO不会阻塞(至少在Linux上,在常用的文件系统上) 线程池:导致意外的性能和内存成本 线程池是最简单、最可移植和最可预测的方法
- 带回调的真正异步IO:施加意外的限制;不过在Windows和FreeBSD上表现不错
- 非阻塞IO:禁用文件系统缓存(至少在Linux和FreeBSD上),但仍不能保证文件IO不会阻塞(至少在Linux上,在常用的文件系统上)
- 线程池:导致意外的性能和内存成本
线程池是最简单、最可移植和最可预测的方法。你可以很容易地用
eventlet.tpool.execute
来包装你的调用,这也是我发现的,就像套接字连接一样,eventlet可以使它变成绿色/异步的,没有问题。但文件I/O,除非在tpool中使用,否则Greenpool无法使其异步。所以用绿色线程进行文件I/O是没有意义的,对吗?因为它可以很容易地在同一进程中协同阻止所有其他线程。是和否。每个打开或其他文件操作确实会阻止所有绿色线程。但是它阻塞的时间通常很短。另一方面,如果您在一些大型共享主机上部署,比如Amazon EC2,可能会导致磁盘IO不足,是的,它可能会阻塞很长时间,然后tpool
将非常有用。衡量一切是成功的关键。
It uses epoll or libevent for highly scalable non-blocking I/O.