what i have now (in relation to the default simpleserver use of bottle.py)
is:
#-------------------------------------------------------------------------------------
from bottle import Bottle, ServerAdapter
from wsgiref.simple_server import WSGIServer, make_server,
WSGIRequestHandler
import select, SocketServer
class StacklessWSGIServer(WSGIServer):
def serve_forever(self, poll_interval=0.5):
self._BaseServer__is_shut_down.clear()
try:
while not self._BaseServer__shutdown_request:
r, w, e = SocketServer._eintr_retry(select.select, [self],
[], [], poll_interval)
if self in r:
self._handle_request_noblock()
tasklets.schedule()
finally:
self._BaseServer__shutdown_request = False
self._BaseServer__is_shut_down.set()
class MyWSGIRefServer(ServerAdapter):
server = None
def run(self, handler):
self.server = make_server(self.host, self.port, handler,
server_class=StacklessWSGIServer,
**self.options)
self.server.serve_forever()
def stop(self):
self.server.shutdown()
app = Bottle()
def start_server(world_model):
config = world_model.config
manager = WebManager(world = world_model, secret =
"jhbv235gfuhbvq2345hy3bo0")
setattr(sys.modules[__name__], "manager", manager)
server = MyWSGIRefServer(host=config.WS_HOST, port=config.WS_PORT)
tasklets.tasklet(app.run)(server = server, debug = config.WS_DEBUG)
return server
#-------------------------------------------------------------------------------------
I did this mainly by some reverse engineering, not by really understanding
the server code.
Cheers, Lars
On Thu, Dec 12, 2013 at 2:07 AM, Andrew Francis <[email protected]>wrote:
> Hi Folks:
>
> This is what I am suggesting. The reactor tasklet before calling the
> underlying select/poll system call should look at the scheduler queue. If
> there are runnable tasklets, then call select/poll with a timeout.
> Otherwise block indefinitely. The idea is if your application is consists
> of mostly I/O bound tasklets, they will be blocked on channels and will
> eventually be scheduled and run when there is I/O for them.
>
> I'll write a simple example to illustrate.....
>
> Cheers,
> Andrew
>
>
> On Wednesday, December 11, 2013 7:00 AM, lars van Gemerden <
> [email protected]> wrote:
> Hi Andrew,
>
> It wasn't blocked on IO, the server got stuck in it's mainloop (or similar
> name). I don't know much about webservers, WSGIservers etc, but what i also
> tried was putting a schedule() in this mainloop (which i think polls the
> socket). Is this what you suggest? It seems to work well, apart from the
> occasional weird AttributeError, which i'll have to look into. However
> others discouraged this approach, but i never quite understood why.
>
> Cheers, Lars
>
>
> On Fri, Dec 6, 2013 at 7:40 PM, Andrew Francis <[email protected]>wrote:
>
> Hi Lars:
>
> Message: 1
> Date: Thu, 5 Dec 2013 22:07:20 +0100
> From: lars van Gemerden <[email protected]>
> To: The Stackless Python Mailing List <[email protected]>
> Subject: Re: [Stackless] monkeypatching
> Message-ID:
> <cap8kt8ylp1p46dezfdbwketvwmbwfxbara+msxvixhuwxj0...@mail.gmail.com>
> Content-Type: text/plain; charset="windows-1252"
>
> >(oh, i created a tasklet for the bottle microframework run() method, which
> >includes the mainn server loop()) ; I only called schedule() on each web
> >server request to be able to do anything outside the server mainloop.
> >However that had the effect that process steps where not executed as
> >long as the end user sent no requests (some processes do not have any
> >web component).
>
> I haven't had a chance to carefully look at your code. However from this
> description, it sounds like a thread/tasklet is blocked on I/O. This will
> have the effect of blocking all tasklets in that thread. What you need to
> do is occasionally call a timeout from the underlying system call (for
> example, select()) and do a schedule() so other tasklets can run.
>
> Cheers,
> Andrew
>
> P.S - Yahoo's new and improved mail interface is killing me!
>
> _______________________________________________
> Stackless mailing list
> [email protected]
> http://www.stackless.com/mailman/listinfo/stackless
>
>
>
>
> --
> ====================================
> Lars van Gemerden
> [email protected]
> +31 6 26 88 55 39
> ====================================
>
>
>
--
====================================
Lars van Gemerden
[email protected]
+31 6 26 88 55 39
====================================
_______________________________________________
Stackless mailing list
[email protected]
http://www.stackless.com/mailman/listinfo/stackless