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