【问题标题】:Google App Engine Task Queues - nasty failureGoogle App Engine 任务队列 - 严重失败
【发布时间】:2011-06-22 08:04:12
【问题描述】:

我正在为 GAE 开发应用程序并尝试使用任务队列。目前,我只是通过 GAE 应用程序启动器在我的 Windows 机器上运行该东西,但是每当我尝试将任何东西排入队列时,开发“服务器”就会崩溃并且日志中充满了讨厌的输出。

taskqueue.add(url='/processWork', params={'key', myModel.key()})

我已尝试在与其他工作的事务中运行它,因此我很确定该工作已成功入队。

然而,不久之后开发服务器崩溃,日志中充满了这样的内容:

ERROR    2011-02-06 17:04:23,289
__init__.py:395] global name 'true' is not defined Traceback (most recent call last):   File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\webapp\__init__.py", line 517, in __call__
    handler.post(*groups)   File "C:\Projects\GAE\MyApp\main.py", line 114, in post
    activity.approved = true NameError: global name 'true' is not defined INFO     2011-02-06 17:04:23,309 dev_appserver.py:3317] "POST /processWork HTTP/1.1" 500 - WARNING  2011-02-06 17:04:23,309 taskqueue_stub.py:586] Task named "task1" on queue "default" failed with code 500; will retry in 30 seconds Traceback (most recent call last):   File "C:\Python27\lib\SocketServer.py", line 284, in _handle_request_noblock
    self.process_request(request, client_address)   File "C:\Python27\lib\SocketServer.py", line 311, in process_request
    self.shutdown_request(request)   File "C:\Python27\lib\SocketServer.py", line 459, in shutdown_request
    request.shutdown(socket.SHUT_WR) AttributeError: 'FakeConnection' object has no attribute 'shutdown' ERROR    2011-02-06 17:04:23,312 dev_appserver_main.py:494] Error encountered: Traceback (most recent call last):
    File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver_main.py", line 488, in main
    http_server.serve_forever()
    File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3947, in serve_forever
    self.handle_request()
    File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3913, in handle_request
    self._handle_request_noblock()
    File "C:\Python27\lib\SocketServer.py", line 287, in _handle_request_noblock
    self.shutdown_request(request)
    File "C:\Python27\lib\SocketServer.py", line 459, in shutdown_request
    request.shutdown(socket.SHUT_WR)   AttributeError: 'FakeConnection' object has no attribute 'shutdown'   Now terminating.
---------------------------------------- Exception happened during processing of request from ('0.1.0.2', 80)
---------------------------------------- 2011-02-06 09:04:23 (Process exited with code 1)

道歉 - 下面的回复发现了错字(正确,不是正确)。然而,当试图解决最初的问题时,这悄悄地出现了。如果我修正了拼写错误,排队的工作就会完成,但我的服务器仍然会在日志中出现此错误:

INFO     2011-02-06 17:50:32,882 dev_appserver.py:3317] "POST /processWork HTTP/1.1" 200 -
Traceback (most recent call last):
  File "C:\Python27\lib\SocketServer.py", line 284, in _handle_request_noblock
    self.process_request(request, client_address)
  File "C:\Python27\lib\SocketServer.py", line 311, in process_request
    self.shutdown_request(request)
  File "C:\Python27\lib\SocketServer.py", line 459, in shutdown_request
    request.shutdown(socket.SHUT_WR)
AttributeError: 'FakeConnection' object has no attribute 'shutdown'
ERROR    2011-02-06 17:50:32,884 dev_appserver_main.py:494] Error encountered:
Traceback (most recent call last):

  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver_main.py", line 488, in main
    http_server.serve_forever()

  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3947, in serve_forever
    self.handle_request()

  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3913, in handle_request
    self._handle_request_noblock()

  File "C:\Python27\lib\SocketServer.py", line 287, in _handle_request_noblock
    self.shutdown_request(request)

  File "C:\Python27\lib\SocketServer.py", line 459, in shutdown_request
    request.shutdown(socket.SHUT_WR)

AttributeError: 'FakeConnection' object has no attribute 'shutdown'

Now terminating.
----------------------------------------
Exception happened during processing of request from ('0.1.0.2', 80)
----------------------------------------
2011-02-06 09:50:32 (Process exited with code 1)

如果我删除对 taskqueue.add 的调用,它可以正常工作(当然,没有排队的工作)。出了什么问题?

【问题讨论】:

标签: python google-app-engine task-queue


【解决方案1】:
File "C:\Python27\lib\SocketServer.py"

App Engine 使用 Python 2.5 运行,而您使用的是 Python 2.7。

【讨论】:

【解决方案2】:

看起来像一个简单的错字:

__init__.py:395] global name 'true' is not defined 
Traceback (most recent call last):   
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\webapp\__init__.py", line 517, in __call__
    handler.post(*groups)   
File "C:\Projects\GAE\MyApp\main.py", line 114, in post
    activity.approved = true NameError: global name 'true' is not defined

转到main.py第395行并更改

 activity.approved = true

 activity.approved = True

(大写“T”)

【讨论】:

  • 哦,天哪 - 太尴尬了。但是,这是我遇到问题后出现的一个小错字。当我解决这个问题时 - 排队的任务有效,但我的服务器仍然崩溃。请参阅原始问题的更新。为我在这里的混乱道歉。
【解决方案3】:

是的,因为您使用的是 2.7。 shutdown() 已添加到 2.6。你必须运行2.5

【讨论】:

    【解决方案4】:

    您实际上可以在此修复中进行猴子补丁(从 Python 2.7.1、pyOpenSSL 0.12 和 Werkzeug 0.6.2 开始需要):

    ### WARNING: Monkey patch in a fix to correct pyOpenSSL's
    ### incompatible ServerSocket implementation that accepts zero arguments
    ### for shutdown() instead of one. Fix is for:
    ### lib/python2.7/SocketServer.py:459's shutdown() call because that
    ### appears to be easier to quickly hack in versus patching
    ### pyOpenSSL. Again, don't use this for production, but it's great for
    ### testing.
    def monkeyp_ssl_shutdown_request(self, request):
        try:
            request.shutdown()
        except socket.error:
            pass #some platforms may raise ENOTCONN here
        self.close_request(request)
    from SocketServer import TCPServer
    TCPServer.shutdown_request = monkeyp_ssl_shutdown_request
    

    不漂亮,但总比有人关闭 SSL TCP 连接时的异常要好。

    app.run(ssl_context='adhoc') # Now works
    

    【讨论】:

      【解决方案5】:

      另一个可能的原因是你没有导入中间件

      from google.appengine.api import taskqueue
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多