Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using web.py as non blocking http-server

while learning some basic programming with python, i found web.py. i got stuck with a stupid problem:

i wrote a simple console app with a main loop that proccesses items from a queue in seperate threads. my goal is to use web.py to add items to my queue and report status of the queue via web request. i got this running as a module but can´t integrate it into my main app. my problem is when i start the http server with app.run() it blocks my main loop. also tried to start it with thread.start_new_thread but it still blocks. is there an easy way to run web.py´s integrated http server in the background within my app.

in the likely event that i am a victim of a fundamental missunderstanding, any attempt to clarify my error in reasoning would help ;.) ( please bear with me, i am a beginner :-)

like image 610
Titusz Avatar asked Feb 01 '09 14:02

Titusz


3 Answers

I found a working solution. In a seperate module i create my webserver:

import web
import threading
class MyWebserver(threading.Thread):

    def run (self):
        urls = ('/', 'MyWebserver')
        app = web.application(urls, globals())
        app.run()

    def POST ...

In the main programm i just call

MyWebserver().start()

and than go on with whatever i want while having the webserver working in the background.

like image 175
Titusz Avatar answered Nov 09 '22 15:11

Titusz


Wouldn't is be simpler to re-write your main-loop code to be a function that you call over and over again, and then call that from the function that you pass to runsimple...

It's guaranteed not to fully satisfy your requirements, but if you're in a rush, it might be easiest.

like image 1
Shalom Craimer Avatar answered Nov 09 '22 16:11

Shalom Craimer


or just use Tornado, a non-blocking webserver for Python that has an API similar to webpy - http://www.tornadoweb.org/

like image 1
Terrence Brannon Avatar answered Nov 09 '22 17:11

Terrence Brannon