【问题标题】:Appengine Python DevServer Module Background Thread 500 ErrorAppengine Python DevServer模块后台线程500错误
【发布时间】:2014-10-09 16:45:17
【问题描述】:

我使用的是 1.9.9 版的 SDK,但我遇到了开发服务器问题。我有一个带有 1 个实例的手动缩放模块。我为/_ah/start 创建了一个webapp2.RequestHandler。在那个处理程序中,我启动了一个后台线程。当我在 devserver 中运行我的应用程序时,_ah/start 处理程序返回 200,但/_ah/background 会在一段时间内随机返回 500 错误。一段时间后(通常是一两分钟,但有时更多),500 错误停止,但每隔几个小时会随机再次出现。似乎每次我打开一个新的浏览器选项卡(Chrome)时,我都会收到同样的错误。有谁知道是什么原因造成的?

这是RequestHandler/_ah/start

class StartupHandler(webapp2.RequestHandler):
    def get(self):
        runtime.set_shutdown_hook(shutdown_hook)

        global foo
        if foo is None:
            foo = Foo()

        background_thread.start_new_background_thread(do_foo, [])

        self.response.http_status_message(200)

这是 500 错误:

ERROR    2014-08-18 07:39:36,256 module.py:717] Request to '/_ah/background' failed
Traceback (most recent call last):
  File "\appengine\tools\devappserver2\module.py", line 694, in _handle_request
    environ, wrapped_start_response)
  File "\appengine\tools\devappserver2\request_rewriter.py", line 311, in _rewriter_middleware
     response_body = iter(application(environ, wrapped_start_response))
  File "\appengine\tools\devappserver2\module.py", line 1672, in _handle_script_request
    request_type)
  File "\appengine\tools\devappserver2\module.py", line 1624, in _handle_instance_request
    request_id, request_type)
  File "\appengine\tools\devappserver2\instance.py", line 382, in handle
    request_type))
  File "\appengine\tools\devappserver2\http_proxy.py", line 190, in handle
    response = connection.getresponse()
  File "E:\Programing\Python27\lib\httplib.py", line 1030, in getresponse
    response.begin()
  File "E:\Programing\Python27\lib\httplib.py", line 407, in begin
    version, status, reason = self._read_status()
  File "E:\Programing\Python27\lib\httplib.py", line 365, in _read_status
    line = self.fp.readline()
  File "E:\Programing\Python27\lib\socket.py", line 430, in readline
    data = recv(1)
error: [Errno 10054] An existing connection was forcibly closed by the remote host
INFO     2014-08-18 07:39:36,257 module.py:1890] Waiting for instances to restart
INFO     2014-08-18 07:39:36,262 module.py:642] lease: "GET /_ah/background HTTP/1.1" 500 -

【问题讨论】:

    标签: python multithreading google-app-engine app-engine-modules gae-module


    【解决方案1】:

    这可能不是答案,但是完成分配给后端的特定任务需要多长时间?似乎是并发问题

    【讨论】:

    • 据我了解,Queue.putQueue.get 内置了锁定机制。我发现了其中一个问题,但这又导致了另一个问题。我正在编辑问题。
    • 这很好,但根据我之前的经验,不建议给后端和任务队列施加重负载,因为它们可能会表现得很奇怪,而且我们不能确定我们可以控制锁定机制
    【解决方案2】:

    看起来问题(据我目前所知)是我正在使用 PyCharm,它会在进入或退出窗口时同步项目的文件。即使没有更改,这也会重写项目文件,这会导致开发服务器重新启动所有实例,从而导致 500 错误。

    More info on PyCharm Synchronization

    Link to issue at PyCharm

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      相关资源
      最近更新 更多