Python 的 `print()` 函数是阻塞函数还是非阻塞函数?

问题描述 投票:0回答:2

我正在尝试加快脚本的处理时间,在某些配置中可能会通过

print()
将大量输出转储到控制台。 Python 的
print()
函数是阻塞还是非阻塞?我无法在文档中找到适当的答案。

python blocking nonblocking
2个回答
0
投票

是的,当你使用Python的print()函数时,它通常是一个阻塞的事情。基本上,它会将您想说的任何内容写入控制台,在执行此操作时,其他所有内容都会等待直到完成


0
投票

这是

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/

© www.soinside.com 2019 - 2024. All rights reserved.