Reputation: 1477
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 :-)
Upvotes: 17
Views: 7741
Reputation: 3551
I have also recently used Beanstalkd to queue up tasks that will run in a separate thread. Your web.py handler just drops a job into a pipe and a completely separate script executes it. You could have any number of these, and you get the benefits of advanced queue control, etc..
Upvotes: 0
Reputation: 1477
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.
Upvotes: 7
Reputation: 4968
or just use Tornado, a non-blocking webserver for Python that has an API similar to webpy - http://www.tornadoweb.org/
Upvotes: 1
Reputation: 21449
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.
Upvotes: 1