Martijn Moeling
martijn at xs4us.nu
Wed Sep 6 11:16:03 EDT 2006
I had similair behaviour when I started working with mod_python, After some digging in the mod_python docs I found that it had to do with global vars in the python module where the handler is defined. Something like: Host = "" Def handler(req) Global host Host=req.host.split(".")[0] I solved this by creating a class which is created and destroyed in the handler, within the init of the class I set the database connection and I can use global vars Class visitor: Def __init__(self): Self.Db.init Self.var="" Def myhandler(Self,req): #Do all the stuff you want Return apache.OK 8<------------------------------- Import visitors Def handler(req): Vis_con=visitor() Result = Vis_con.myhandler(req) Return result (this is rough unchecked code but just explains my point) -----Original Message----- From: mod_python-bounces at modpython.org [mailto:mod_python-bounces at modpython.org] On Behalf Of Jim Gallacher Sent: Wednesday, September 06, 2006 1:45 PM To: Ethan Toan Ton Cc: mod_python at modpython.org Subject: Re: [mod_python] Multiple returns to client Ethan Toan Ton wrote: > Mike, > > Thanks for the help. req.flush() works for sending out the data. > Unfortunately, at the same time, my python program is making requests and > receiving data from other http sources at the same time. When I run the > req.flush(), it outputs some of the incoming data as well. Not sure why > that is happening. That doesn't make any sense at all. Perhaps you can give a concrete example? Method req.flush() is a simple wrapper around the Apache ap_rflush() call. Note that you can also use req.write(some_string, flush=1) to immediately flush the output. For flush=1 causes ap_rflush() to be called as well. Jim > Ethan > > >> Your output is buffered in multiple stages. In most cases, you can call >> "req.flush()" to send data to the client. This will usually work, unless >> you have a module or a filter installed that collects output until the >> final stage. >> >> For example, this pattern shows how to send output from a slow query >> back to the user, so that he can see the results as they come back. By >> calling req.flush() at smart points, we make sure there's some feedback >> quite efficiently. >> >> ... >> req.write("<P>Results:</P><table><tr><th>Name</th><th>Date</th></tr>") >> req.flush() >> c=database.cursor() >> c.execute("SELECT name,date FROM persons") >> while 1: >> data = c.fetchmany() >> if not data: >> break >> for row in data: >> req.write("<tr><td>%s</td><td>%s</td></tr>" % row) >> req.flush() >> req.write("</table>") >> ... >> >> >> Mike Looijmans >> Philips Natlab / Topic Automation >> >> >> Ethan Toan Ton wrote: >>> I was wondering if anyone knew of a way to return multiple times to a >>> client using a Mod-Python event handler. Using the req.write() method >>> does nothing until the actual return statement sends all the data in one >>> message back to the client. So before you get to the actual return >>> statement, can you output back to them more than once? >> _______________________________________________ >> Mod_python mailing list >> Mod_python at modpython.org >> http://mailman.modpython.org/mailman/listinfo/mod_python >> > > > _______________________________________________ > Mod_python mailing list > Mod_python at modpython.org > http://mailman.modpython.org/mailman/listinfo/mod_python > _______________________________________________ Mod_python mailing list Mod_python at modpython.org http://mailman.modpython.org/mailman/listinfo/mod_python
|