Need help on designing a project

M

Mardy

Hi all,
I'm starting to think the way I've implemented my program
(http://www.mardy.it/eligante) is all wrong.
Basically, what I want is a web application, which might run as CGI
scripts in apache (and this is working) or even as a standalone
application, in which case it would use it's own internal webserver.

The question is about this homemade webserver: right now it's a slightly
modified version of the standard CGIHTTPServer module. Since I know all my
CGIs are python scripts, I thought that performance would be best if they
are executed with the execfile command, in the same process as the
webserver.

This works, but my problem is that SQL connections (MySQL or sqlite) don't
get closed when the script execution finishes, and at the next execution
of a CGI they may lock the database (this is especially true with sqlite,
but even mysql on Windows gave me these problems).

I tryed to call atexit.register() from inside the CGI script (in order to
close the connection) but my atexit function get called only when the
webserver itself exits.


So, I'd like to know if there is a quick solution, or if I have to rewrite
the whole mechanism (maybe using some existing framework? which one?).


What I care most, is the ease of installation and use of my program (and
portability). That's why I'm not contented with apache.
 
S

Steve Holden

Mardy said:
Hi all,
I'm starting to think the way I've implemented my program
(http://www.mardy.it/eligante) is all wrong.
Basically, what I want is a web application, which might run as CGI
scripts in apache (and this is working) or even as a standalone
application, in which case it would use it's own internal webserver.

The question is about this homemade webserver: right now it's a slightly
modified version of the standard CGIHTTPServer module. Since I know all my
CGIs are python scripts, I thought that performance would be best if they
are executed with the execfile command, in the same process as the
webserver.

This works, but my problem is that SQL connections (MySQL or sqlite) don't
get closed when the script execution finishes, and at the next execution
of a CGI they may lock the database (this is especially true with sqlite,
but even mysql on Windows gave me these problems).

I tryed to call atexit.register() from inside the CGI script (in order to
close the connection) but my atexit function get called only when the
webserver itself exits.


So, I'd like to know if there is a quick solution, or if I have to rewrite
the whole mechanism (maybe using some existing framework? which one?).


What I care most, is the ease of installation and use of my program (and
portability). That's why I'm not contented with apache.
The logical solution to your problem appears to be to explicitly close
the database connections at the end of each CGI script. Is there some
reason you can't do this?

Note that if you are using execfile()then the best structure for your
scripts would be something like:

conn = db.open(....)
try:
#do CGI stuff
finally:
conn.close()

to make sure that the connection is always closed. Would this help, do
you think?

regards
Steve
 
M

Mardy

Le die Fri, 02 Dec 2005 11:34:45 +0000, Steve Holden ha scribite:
Note that if you are using execfile()then the best structure for your
scripts would be something like:

conn = db.open(....)
try:
#do CGI stuff
finally:
conn.close()

That was of great help! Thanks!
 
M

Magnus Lycka

Mardy said:
This works, but my problem is that SQL connections (MySQL or sqlite) don't
get closed when the script execution finishes, and at the next execution
of a CGI they may lock the database (this is especially true with sqlite,
but even mysql on Windows gave me these problems).

You should know that there is a severe performance penalty in
opening and closing database onnections. I actually did a
measurement on something similar yesterday, and with open/close
with each database operation, I got 50 operations per second.
If I only opened and closed once, I could manage 1000 operations
per second.

You might want to have a look at something like
http://sqlrelay.sourceforge.net/
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,754
Messages
2,569,521
Members
44,995
Latest member
PinupduzSap

Latest Threads

Top