Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python eventlet-文件异步(非阻塞)io_Python_Eventlet - Fatal编程技术网

python eventlet-文件异步(非阻塞)io

python eventlet-文件异步(非阻塞)io,python,eventlet,Python,Eventlet,根据: 我知道这里的非阻塞I/O涵盖了与套接字交互时的情况。eventlet对套接字进行绿化/修补后,套接字连接将变为非阻塞连接 我的问题是:这里的非阻塞I/O是否也包括文件I/O 不,那也可以 带回调的真正异步IO:施加意外的限制;不过在Windows和FreeBSD上表现不错 非阻塞IO:禁用文件系统缓存(至少在Linux和FreeBSD上),但仍不能保证文件IO不会阻塞(至少在Linux上,在常用的文件系统上) 线程池:导致意外的性能和内存成本 线程池是最简单、最可移植和最可预测的方法

根据:

我知道这里的非阻塞I/O涵盖了与套接字交互时的情况。eventlet对套接字进行绿化/修补后,套接字连接将变为非阻塞连接

我的问题是:这里的非阻塞I/O是否也包括文件I/O

不,那也可以

  • 带回调的真正异步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.