【问题标题】:Can the print function be used reliably in GCE apps?打印功能能否在 GCE 应用程序中可靠使用?
【发布时间】:2017-12-29 14:28:05
【问题描述】:

我有一个 GCE 应用程序,它由一个 Python 脚本组成,该脚本具有一些长时间运行的功能(其中大部分是查询数据库并将结果发送到某处)。似乎当脚本挂在这些运行时间较长的任务之一时,没有任何内容打印到 Stackdriver Logging,甚至在脚本挂起的位置之前出现的 print() 语句。这似乎是 Compute Engine 或 Stackdriver 中的错误,使调试脚本变得非常困难(例如,我看不到最后一个成功的 print 语句发生在哪里)。

我宁愿修复这个错误,而不是必须添加 logging 模块,因为设置它似乎需要大量开销。

【问题讨论】:

  • 这似乎行得通!如果您将其发布为答案,我会接受。这似乎很奇怪,但它只发生在 Compute Engine 上,即使在 Google Cloud Shell 中,打印也没有flush

标签: python google-compute-engine stackdriver


【解决方案1】:

根据unix.stackexchange.comthis answer,当进程的输出重定向到终端以外的其他对象时,操作系统可能会将输出临时存储在缓冲区中。缓冲输出通过减少系统调用和 IO 操作的数量来提高效率。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多