微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以在Linux上打开一个命名管道,用于在Python中进行非阻塞写入吗?

我使用mkfifo创建了一个fifo文件.是否可以不受阻塞地打开/写入?我想知道是否有读者是不可知论者.

下列:

with open('fifo','wb',0) as file:
    file.write(b'howdy')

只是在露天停下来,直到我从另一个外壳做了一个cat fifo.我希望我的程序能够取得进步,无论数据消费者是否正在观看.

我应该使用不同的Linux机制吗?

解决方法

来自man 7 fifo:

A process can open a FIFO in nonblocking mode. In this case,opening or read-only will succeed even if no-one has opened on the write side yet,opening for write-only will fail with ENXIO (no such device or address) unless the other end has already been opened.

所以第一个解决方案是使用O_NONBLOCK打开FIFO.在这种情况下,您可以检查errno:如果它等于ENXIO,那么您可以稍后尝试打开FIFO.

import errno
import posix

try:
    posix.open('fifo',posix.O_WRONLY | posix.O_NONBLOCK)
except OSError as ex:
    if ex.errno == errno.ENXIO:
        pass # try later

另一种可能的方法是使用O_RDWR标志打开FIFO.在这种情况下它不会阻止.其他进程可以使用O_RDONLY打开它而没有问题.

import posix
posix.open('fifo',posix.O_RDWR)

原文地址:https://www.jb51.cc/linux/393343.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐