AttributeError: 'WSGIServer' object has no attribute 'kill'

364 views
Skip to first unread message

vitaly

unread,
Sep 4, 2012, 9:21:24 PM9/4/12
to gev...@googlegroups.com
The following crashes with:
Traceback (most recent call last):
  File "/Users/vkruglikov/nta/current/lib/python2.6/site-packages/gevent/greenlet.py", line 328, in run
    result = self._run(*self.args, **self.kwargs)
  File "/Users/vkruglikov/nta/current/lib/python2.6/site-packages/gevent/baseserver.py", line 278, in serve_forever
    self.start()
  File "/Users/vkruglikov/nta/current/lib/python2.6/site-packages/gevent/baseserver.py", line 239, in start
    self.kill()
AttributeError: 'WSGIServer' object has no attribute 'kill'
<Greenlet at 0x10711d408: <bound method WSGIServer.serve_forever of <WSGIServer at 0x107124f90 address=192.168.20.1:51868>>(stop_timeout=20)> failed with AttributeError


import gevent
from gevent import socket as gevent_socket
from gevent.pywsgi import WSGIServer


class AsyncGeventWSGIServer(object):
  """ Runs gevent's WSGIServer in its own greenlet """
  
  def __init__(self, listener, application=None, backlog=None, **kwargs):
    """
    Same args/kwargs as gevent.pywsgi.WSGIServer constructor
    
    If listener arg is None, creates a listener socket with hostname of
    socket.gethostname(), and forces port auto-binding, such that subsequent
    call to getListenerAddress() will return a valid address/port pair.
    """
    
    if listener is None:
      listener = gevent_socket.socket()
      listener.bind((gevent_socket.gethostname(), 0))
      listener.listen(backlog or WSGIServer.backlog)
      listener.setblocking(0)
      
    
    self._wsgi = WSGIServer(listener, application, backlog, **kwargs)
    self._wsgiGreenlet = gevent.spawn(self._wsgi.serve_forever, stop_timeout=20)
    geventhelpers.linkException(self._wsgiGreenlet)
    return
  
  
  def close(self):
    """ Shut down the server """
    gevent.sleep()
    self._wsgi.stop(timeout=20)
    
    self._wsgiGreenlet.join(timeout=20)
    geventhelpers.unlinkException(self._wsgiGreenlet)
    
    return


s = AsyncGeventWSGIServer(None)

s.close()



vitaly

unread,
Sep 4, 2012, 9:23:41 PM9/4/12
to gev...@googlegroups.com
Forgot to mention: I was using gevent 1.0b2.  However, the latest gevent sources appear to have the same issue in baseserver.py.

Denis Bilenko

unread,
Sep 5, 2012, 3:30:30 AM9/5/12
to gev...@googlegroups.com
On Wed, Sep 5, 2012 at 5:21 AM, vitaly <vitaly.kru...@gmail.com> wrote:
> "/Users/vkruglikov/nta/current/lib/python2.6/site-packages/gevent/baseserver.py",
> line 278, in serve_forever
> self.start()
> File
> "/Users/vkruglikov/nta/current/lib/python2.6/site-packages/gevent/baseserver.py",
> line 239, in start
> self.kill()
> AttributeError: 'WSGIServer' object has no attribute 'kill'

Thanks for the report! Fixed in
https://bitbucket.org/denis/gevent/changeset/3f16ba5691b61236831efa1d25f280c9d98a1232
Reply all
Reply to author
Forward
0 new messages