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