Hi,

I created postfork decorater to forking my config class for each worker. In
config class there is establishing mysql database connection in init.
Everything seems to be working fine (selects working well) but mysql "show
global status" shows after starting uWSGI RPC server with 3 workers:
Threads_cached  2
Threads_connected 1
Threads_created 3
Threads_running 1

Shouldn't be there "Threads_connected  3"? Or do I have something wrong in
calling @postfork?

Short examples:

*file: server.py*
from lib import config as configapp
@postfork
def init():
    import __builtin__
    __builtin__.ConfigPhotoserver = configapp.ConfigPhotoserver

import rpcinterface as iface
...


*file: rpcinterface.py: *there is no importing config, ConfigPhotoserver is
already in global scope (checked with: print globals())
def getGallery():
    cfg = ConfigPhotoserver()
    conn = cfg.sql.conn


    c = conn.cursor()
    # .... etc

*file config.py:*
class ConfigPhotoserver:
    def __init__(self):
        # some init ConfigParser stuff ....etc

        self.sql = ConfigSql(parser)

class ConfigSql(Sql):
     def __init__(self):
         # parsing values needed for connection ....etc

         self.connect()

*file sql.py:*
import* *MySQLdb
class Sql():
    def __init__(self):
        self.conn = False
    #enddef

    def connect(self):
        self.conn = \
                MySQLdb.connect(
                    user=self.user, \
                    host=self.host, \
                    passwd=self.password, \
                    db=self.database, \
                    unix_socket=self.socket
        )

        return self.conn

Maybe it is a bit complicated but it seemed to me as the best solution: if
I want db connection was created after forking each worker (and to be
write-safe) and not to pass param conn in each function that needs it.

Thanks for any remarks :-)

Tom
_______________________________________________
uWSGI mailing list
[email protected]
http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi

Reply via email to