打印功能能否在 GCE 应用程序中可靠地使用?
Can the print function be used reliably in GCE apps?
我有一个 GCE 应用程序,它由一个 Python 脚本组成,该脚本具有一些长 运行 函数(其中大部分是查询数据库并将结果发送到某处)。似乎当脚本挂起这些较长的 运行 任务之一时,没有任何内容打印到 Stackdriver Logging, 甚至 print()
脚本挂起位置之前的语句 .这似乎是 Compute Engine 或 Stackdriver 中的错误,使调试脚本变得非常困难(例如,我看不到最后一个成功的 print
语句发生在哪里)。
我希望只修复此错误,而不必添加 logging
模块,因为设置它似乎需要大量开销。
根据 this answer from unix.stackexchange.com,当进程的输出被重定向到终端以外的其他东西时,操作系统可能会将输出临时存储在缓冲区中。缓冲输出通过减少系统调用和 IO 操作的数量来提高效率。
可以从 python 脚本或应用程序中手动刷新缓冲输出。
- 在 python3 中,在
print
函数上设置 flush
标志。
print('foo', flush=True)
- 在python2中,打印后刷新
sys.stdout
。
print 'foo'; sys.stdout.flush()
我有一个 GCE 应用程序,它由一个 Python 脚本组成,该脚本具有一些长 运行 函数(其中大部分是查询数据库并将结果发送到某处)。似乎当脚本挂起这些较长的 运行 任务之一时,没有任何内容打印到 Stackdriver Logging, 甚至 print()
脚本挂起位置之前的语句 .这似乎是 Compute Engine 或 Stackdriver 中的错误,使调试脚本变得非常困难(例如,我看不到最后一个成功的 print
语句发生在哪里)。
我希望只修复此错误,而不必添加 logging
模块,因为设置它似乎需要大量开销。
根据 this answer from unix.stackexchange.com,当进程的输出被重定向到终端以外的其他东西时,操作系统可能会将输出临时存储在缓冲区中。缓冲输出通过减少系统调用和 IO 操作的数量来提高效率。
可以从 python 脚本或应用程序中手动刷新缓冲输出。
- 在 python3 中,在
print
函数上设置flush
标志。print('foo', flush=True)
- 在python2中,打印后刷新
sys.stdout
。print 'foo'; sys.stdout.flush()