【发布时间】:2012-11-28 21:47:22
【问题描述】:
我得到一个空白屏幕,日志中显示以下警告消息:
A problem was encountered with the process that handled this request,
causing it to exit. This is likely to cause a new process to be used for
the next request to your application. (Error code 204)
我没有其他事情可以继续。我正在大量使用 tasklet (@ndb.tasklet)、异步数据存储操作和异步 urlfetches(它是一个搜索引擎)。根据 appstats,例如,我将 15 分钟的处理时间缩短为 15 秒。如果我处理较少的数据,它会起作用。如果我处理更多它会失败并显示上述警告。实例选项卡仅显示一次实例。我的直觉是我正在重载该实例。
我认为额外的实例会自动启动以支持额外的负载 - 尽管实例可能只响应请求而不是 CPU/内存负载?当我启动三个不同的页面时,三个不同的实例也会启动。问题是每个请求都需要大量处理。
我可以使用任务队列来定位后端实例,但我需要知道任务何时完成并返回结果。不幸的是,任务队列有no way of monitoring when a given task has been completed。
我如何(并且应该)明确地跨实例拆分处理?还有其他解决方案吗?如何避免 204 错误消息?
编辑: 我通过以下方式提高了递归限制:
sys.setrecursionlimit
当我对此发表评论时,我收到以下错误:
RuntimeError: maximum recursion depth exceeded
【问题讨论】:
-
您将结果发送到哪里。我了解任务可以通过通道将结果发送到 javascript 客户端。
-
好点。现在它是对 http 请求的简单响应。
-
你用的是python还是python27?如果是 python27,你是否将线程安全设置为 true?如果是这样,您的代码或 NDB 中的并发访问可能存在线程问题。
-
是:python27,线程安全为真。如何调试并发访问的线程问题?
标签: python google-app-engine google-cloud-datastore cloud app-engine-ndb