linux环境下如何修改PIPE BUFFER SIZE

转载自Python:linux 环境下如何修改PIPE bufer size

当 PIPE 的写入方写的太快,但是读取方来不及读取的时候,就会把 buffer 给写满从而出现 resource temporarily unavailable 错误。在 linux 下可以通过 fcntl.fcntl(fd, fcntl.F_SETPIPE_SZ, size) 来设置 PIPE 的 buffer 大小。

相关 Python 代码如下:

1
2
3
4
5
6
7
8
9
import fcntl
import platform

try:
if platform.system() == 'Linux':
fcntl.F_SETPIPE_SZ = 1031
fcntl.fcntl(fd, fcntl.F_SETPIPE_SZ, size)
except IOError:
print('can not change PIPE buffer size')

一般可以通过 read_fd, write_fd = os.pipe() 来生成 pipe, 此时上面的 fd 对应 read_fdwrite_fd

  • 捕获 IOError 异常是因为有的 linux 内核版本不支持修改 PIPE buffer 大小。
  • python 的 fcntl 没有 F_SETPIPE_SZ 属性,所以我们定义了这个属性,它的值来自 fcntl.h
感谢你对我的支持,让我继续努力分享有用的技术和知识点