【问题标题】:Should manual logservice flush work with automatic flush enabled?手动日志服务刷新是否应该在启用自动刷新的情况下工作?
【发布时间】:2014-06-06 09:32:59
【问题描述】:

我有一个发送电子邮件的 cron 任务。为了在 GAE 配额内,每发送一封电子邮件后,它会休眠 8 秒 (time.sleep(8))。结果,作业运行超过 60 秒,我得到 CancelledError: The API call logservice.Flush() was explicitly cancelled 异常。

我找到了解决方案here 并开始在每条消息发送后手动调用logservice.Flush(),但它没有帮助。所以,我试图了解原因。我应该将AUTOFLUSH_ENABLED 更改为False 以使用manual flush 吗?

【问题讨论】:

    标签: python google-app-engine exception logging cron


    【解决方案1】:

    您为什么不使用 cron 启动发送电子邮件的任务,然后您有 10 分钟而不是 60 秒的时间来运行该作业。

    【讨论】:

    • 这正是我所做的。但仍然得到这个CancelledError。请看一下我所指的问题 - 第一个人也在谈论 cron 作业任务并且遇到了同样的问题。
    【解决方案2】:

    大多数情况下,可以使用任务队列和管理队列速率来代替休眠以达到配额,如documentation 中所述。

    【讨论】:

    • 大卫,请在另一个答案中查看我的评论 - 我已经使用任务队列并在那里解决了这个问题。
    • 嘿LA_,我的意思是您可以使用任务队列删除“睡眠”指令,从而查看它是否会删除您的错误。如果您尝试过,请更新问题以反映电子邮件是在任务队列中发送的,并删除对“睡眠”的引用。
    • 对不起,我说我这里使用任务队列是错误的。但这是 cron 工作,所以它有相同的 10 分钟限制。如果我删除sleep,则会发生异常(API 超出配额),当然,我不会有那个CancelledError
    • “API 超出配额”错误是因为您同时发送的邮件太多。创建任务队列,根据配额设置合适的速率,每封邮件创建一个任务发送。
    猜你喜欢
    • 2021-02-22
    • 1970-01-01
    • 2020-12-23
    • 2018-11-26
    • 1970-01-01
    • 2015-04-27
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多