You were right. Connection was not persistent. Finally the solution was
easy - I moved connecting to db to @postfork function and added instance of
class to global scope instead of adding class itself.

Now mysql stat shows expected values for "Threads_created".
Thanks for hint :)

Tom


On Sat, May 25, 2013 at 7:15 PM, dracek mracek <[email protected]> wrote:

> Sure. Here it is:
>
> Main server module: http://pastebin.com/yLuZr12S
> Here I'm building MySQL connection: http://pastebin.com/ega3S5ye
> This is imported into rpcinterface and items are retrieved:
> http://pastebin.com/tJpvS60c
>
> And the class ConfigSql(Sql) I posted in first post of this thread.
>
>
>
> On Sat, May 25, 2013 at 6:50 PM, Roberto De Ioris <[email protected]>wrote:
>
>>
>> > Thanks for reply,
>> >
>> > processlit just shows 1 peer:
>> > mysql  -e"show processlist;"
>> > | 103 | root | localhost | photodb_dev | Query   |    0 | NULL  | show
>> > processlist |
>> >
>> > I also compared result of "show global status" before and after start
>> > uWSGI
>> > server but found nothing significant, maybe only "Aborted_connects" -
>> but
>> > it's in both cases.
>> >
>> > before starting uWSGI server: http://pastebin.com/HwNRFVZA
>> > after starting: http://pastebin.com/iRMsHxKG
>> >
>> > Tom
>> >
>>
>> It looks like connections are not persistent.
>>
>> Can you report the code calling the query ?
>>
>> >
>> > On Sat, May 25, 2013 at 5:53 PM, Roberto De Ioris <[email protected]>
>> > wrote:
>> >
>> >>
>> >> > 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 :-)
>> >> >
>> >>
>> >> The 2 cached threads should confirm you the code is right.
>> >>
>> >> Does show processlist reports 3 peers ?
>> >>
>> >>
>> >> --
>> >> Roberto De Ioris
>> >> http://unbit.it
>> >> _______________________________________________
>> >> uWSGI mailing list
>> >> [email protected]
>> >> http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi
>> >>
>> > _______________________________________________
>> > uWSGI mailing list
>> > [email protected]
>> > http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi
>> >
>>
>>
>> --
>> Roberto De Ioris
>> http://unbit.it
>> _______________________________________________
>> uWSGI mailing list
>> [email protected]
>> http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi
>>
>
>
_______________________________________________
uWSGI mailing list
[email protected]
http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi

Reply via email to