【问题标题】:How to fix deferred tasks being sent to not initialized instance?如何修复发送到未初始化实例的延迟任务?
【发布时间】:2023-03-27 09:00:02
【问题描述】:

我的 Google AppEngine 网站正在使用延迟任务来完成大量额外工作。有时,延迟任务的数量会导致创建一个新实例。发生这种情况时,委派给这个新实例的所有任务都会失败,因为它们在实例有机会初始化之前就被发送到那里。如果在任务进入之前已经启动了足够多的实例,则不会出现问题。

以下是其中一项失败任务的示例:

Permanent failure attempting to execute task (/.../google/appengine/ext/deferred/deferred.py:327)
Traceback (most recent call last):
  File "/.../google/appengine/ext/deferred/deferred.py", line 318, in post
    self.run_from_request()
  File "/.../google/appengine/ext/deferred/deferred.py", line 313, in run_from_request
    run(self.request.body)
  File "/.../google/appengine/ext/deferred/deferred.py", line 153, in run
    raise PermanentTaskFailure(e)
PermanentTaskFailure: No module named django

有没有办法告诉延迟系统等到实例完全初始化后再向它发送任务?我正在为这个问题而脱发。

【问题讨论】:

  • 当你说实例没有完全初始化,是指实例本身在启动运行之前正在接收任务,还是你在实例上的代码还没有初始化?
  • 我已经编辑了问题以包含我遇到的错误示例。似乎代码试图在我的 Django 应用程序实际启动之前运行,因为该应用程序所做的第一件事就是修复 python 路径。

标签: python django google-app-engine deferred djangae


【解决方案1】:

GAE warmup requests 正是为此而设计的:

将您的应用代码加载到新实例可能会导致loading requests。加载请求可能会导致请求延迟增加 对于您的用户,但您可以使用 warmup 来避免这种延迟 请求。预热请求将您的应用程序代码加载到新实例中 在任何实时请求到达该实例之前。

你只需要:

【讨论】:

    猜你喜欢
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多