我有一个GCE应用程序,它包含一个Python脚本,它有一些长时间运行的功能(大多数是查询数据库并在某处发送结果)。似乎当脚本挂起其中一个运行较长的任务时,没有任何内容打印到Stackdriver Logging,甚至print()
语句出现在脚本挂起的地方之前。这似乎是Compute Engine或Stackdriver中的错误,并且使得调试脚本非常困难(例如,我无法看到上次成功发送print
语句的位置)。
我更喜欢修复此错误而不必添加logging
模块,因为它似乎需要设置大量的开销。
答案 0 :(得分:1)
来自this answer的unix.stackexchange.com,当进程的输出被重定向到终端以外的其他内容时,操作系统可以将输出临时存储在缓冲区中。缓冲输出通过减少系统调用和IO操作的数量来提高效率。
可以在python脚本或应用程序中手动刷新缓冲输出。
flush
函数上设置print
标志。
print('foo', flush=True)
sys.stdout
。
print 'foo'; sys.stdout.flush()