可以在GCE应用程序中可靠地使用打印功能吗?

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

我有一个GCE应用程序,由一个Python脚本组成,它有一些长时间运行的功能(大多数是查询数据库并在某处发送结果)。似乎当脚本挂在其中一个较长时间运行的任务上时,没有任何内容打印到Stackdriver Logging,甚至是在脚本挂起的地方之前的print()语句。这似乎是计算引擎或堆栈驱动程序中的错误,并使调试脚本非常困难(例如,我无法看到最后成功的print语句出现在哪里)。

我更喜欢修复这个bug,而不是必须添加logging模块,因为它似乎有很大的开销来设置它。

python google-compute-engine stackdriver
1个回答
1
投票

根据this answerunix.stackexchange.com,当进程的输出被重定向到终端以外的其他东西时,输出可以由操作系统临时存储在缓冲区中。缓冲输出通过减少系统调用和IO操作的数量来提高效率。

缓冲输出可以在python脚本或应用程序中手动刷新。

  • 在python3中,在flush函数上设置print标志。 print('foo', flush=True)
  • 在python2中,打印后刷新sys.stdoutprint 'foo'; sys.stdout.flush()
© www.soinside.com 2019 - 2024. All rights reserved.