In other words. .run() should only be ever used in another thread because that will actually run the server, and .create() will create a new thread and run the server by default.
> On Oct 7, 2015, at 11:23 , Michael Merickel <[email protected]> wrote: > > I think this is documented poorly but basically when you did server = > StopableWSGIServer.create(...) the server is already running at that point. > The run() method is not necessary when using create(). It is only necessary > if you don't use the create() helper and directly instantiate a > StopableWsgiServer yourself. > > You can see this in the code here > https://github.com/Pylons/webtest/blob/0b9d1a748e6c1436cdb1e6fd6c251d201a487aac/webtest/http.py#L117-L120 > > On Thu, Oct 1, 2015 at 9:38 AM, Alain Désilets <[email protected]> > wrote: > I am working on some integration tests for a Pyramid app, and I want to run > the under StopableWSGIServer, in the same process as the tests. The reason > for this is that I want to get test coverage for both the tests and the app > itself. > > > > But try as I may, it seems that StoppableWSGIServer.run() is blocking, which > prevents the tests from ever running. > > > > Below is a small "hello world" script that illustrates the problem. > Basically, the print statements that follow the call to run() are never > printed. Also, when I load the 'hello' page in a browser, it displays > properly, but I get the following exceptions in the server's console window: > > > > > - Socket error > > - Unexpected exception when flushing > > > > Here is the code for the script. Am I misunderstanding how to use > StopableWSGIServer? Maybe this is a Windows vs Unix thing (I am running this > on Windows 7). > > > > I googled for StopableWSGIServer with the various exceptions and didn't find > anything. > > > > Thx for your help. > > > > Alain > > > > ------ demoapp.py --- > > from pyramid.config import Configurator > > from pyramid.response import Response > > from webtest.http import StopableWSGIServer > > > > def hello_world(request): > > return Response('Hello %(name)s!' % request.matchdict) > > > > def main(): > > """ This function returns a Pyramid WSGI application. > > """ > > config = Configurator() > > config.add_route('hello', '/hello/{name}') > > config.add_view(hello_world, route_name='hello') > > return config.make_wsgi_app() > > > > if __name__ == "__main__": > > app = main() > > port = 6543 > > host = 'localhost' > > server = StopableWSGIServer.create(app, port=port, host=host) > > > > server.run() > > > > # > > # Hum... somehow on windows, the run() call above is blocking and we never > > # get to see the message printed by the rest of the script. > > # > > # Also, when I access > > # > > # http://localhost:6543/hello/alain > > # > > # The page displays correctly in the web browser, but the server's > > # console window shows this error message: > > # > > # Socket error > > # Traceback (most recent call last): > > # File "C:\Python34\lib\site-packages\waitress\channel.py", line 166, > in handle_read > > # data = self.recv(self.adj.recv_bytes) > > # File "C:\Python34\lib\asyncore.py", line 379, in recv > > # data = self.socket.recv(buffer_size) > > # BlockingIOError: [WinError 10035] A non-blocking socket operation could > not be completed immediately > > # > > # OR, other times I will get this message: > > # > > # Unexpected exception when flushing > > # Traceback (most recent call last): > > # File "C:\Python34\lib\site-packages\waitress\channel.py", line 139, > in handle_write > > # flush() > > # File "C:\Python34\lib\site-packages\waitress\channel.py", line 258, > in _flush_some > > # outbuf.skip(num_sent, True) > > # File "C:\Python34\lib\site-packages\waitress\buffers.py", line 269, > in skip > > # buf.skip(numbytes, allow_prune) > > # File "C:\Python34\lib\site-packages\waitress\buffers.py", line 77, in > skip > > # numbytes, self.remain) > > # ValueError: Can't skip 146 bytes in buffer of 0 bytes > > # > > print("Web server started on %s:%s" % (host, port)) > > input("Type any key to stop the server...") > > print("Shutting down the server...") > > server.shutdown() > > print("Server stopped... May need to Ctrl-C to quit completelly.") > > > > > > > -- > You received this message because you are subscribed to the Google Groups > "pylons-discuss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/pylons-discuss. > For more options, visit https://groups.google.com/d/optout. > > > -- > You received this message because you are subscribed to the Google Groups > "pylons-discuss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/pylons-discuss. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "pylons-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/pylons-discuss. For more options, visit https://groups.google.com/d/optout.
smime.p7s
Description: S/MIME cryptographic signature
