我编写了以下代码来了解非阻塞写操作的方式:
import os, time
def takeAnap():
print('I am sleeping a bit while it is writing!')
time.sleep(50)
fd = os.open('t.txt', os.O_CREAT | os.O_NONBLOCK)
for i in range(100):
# Non-blocking write
fd = os.open('t.txt', os.O_APPEND | os.O_WRONLY | os.O_NONBLOCK)
os.write(fd, str(i))
os.close(fd)
time.sleep(2)
takeAnap()
正如您所看到的,我正在创建takeAnap()
以便在处理循环时激活,以便我可以说服自己写作是在没有阻塞的情况下执行的!但是,循环仍会阻塞,并且在完成之前不执行该方法。我不确定我的理解是否错误但据我所知,非阻塞操作允许您在处理写入时执行其他任务。那是对的吗?如果是这样,请问我的代码中的问题在哪里!
谢谢。
答案 0 :(得分:1)
我认为您误解了O_NONBLOCK
标志的用途。这是实际标志的作用:
这可以防止打开阻止“长时间”打开文件。 这仅对某些类型的文件有意义,通常是设备 作为串口;当它没有意义时,它是无害的 忽略。
摘自https://www.gnu.org/software/libc/manual/html_node/Open_002dtime-Flags.html。
因此,该标志不指定非阻塞写,而是非阻塞打开。写作仍然是连续的,阻塞的,慢的。