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

时间:2017-12-29 14:28:05

标签: python google-compute-engine stackdriver

我有一个GCE应用程序,它包含一个Python脚本,它有一些长时间运行的功能(大多数是查询数据库并在某处发送结果)。似乎当脚本挂起其中一个运行较长的任务时,没有任何内容打印到Stackdriver Logging,甚至print()语句出现在脚本挂起的地方之前。这似乎是Compute Engine或Stackdriver中的错误,并且使得调试脚本非常困难(例如,我无法看到上次成功发送print语句的位置)。

我更喜欢修复此错误而不必添加logging模块,因为它似乎需要设置大量的开销。

1 个答案:

答案 0 :(得分:1)

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

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

  • 在python3中,在flush函数上设置print标志。
    • print('foo', flush=True)
  • 在python2中,打印后刷新sys.stdout
    • print 'foo'; sys.stdout.flush()