我正在尝试加快脚本的处理时间,在某些配置中可能会通过
print()
将大量输出转储到控制台。 Python 的 print()
函数是阻塞还是非阻塞?我无法在文档中找到适当的答案。
是的,当你使用Python的print()函数时,它通常是一个阻塞的事情。基本上,它会将您想说的任何内容写入控制台,在执行此操作时,其他所有内容都会等待直到完成
这是
print()
在Python中的实现,本质上是一个具有各种格式化任务的写入函数。
https://github.com/python/cpython/blob/v3.11.2/Python/bltinmodule.c#L1986
可以在 UNIX 上打开非阻塞文件写入,但是,打开非阻塞模式对于常规文件没有明显效果
f = os.open("fname", os.O_CREAT | os.O_WRONLY | os.O_NONBLOCK)
据我了解,写入任务会填充缓冲区并随后写入磁盘。
进一步了解 POSIX,
也就是说,写入必须是强一致的——也就是说,需要 write() 来阻止应用程序执行,直到系统可以保证任何其他 read() 调用都将看到刚刚写入的数据。 https://www.nextplatform.com/2017/09/11/whats-bad-posix-io/