[Python-Dev] Different cpu python code usage between embedded mode and standalone mode

Guido van Rossum guido at python.org
Sat Jun 7 19:27:07 CEST 2008


This is not an issue for python-dev, but I have to ask: what do you
mean by "embedded mode"?
On Sat, Jun 7, 2008 at 10:14 AM, Pau Freixes <pfreixes at gmail.com> wrote:
> Hi list,
>> First Hello to all, I have a serious problem for understand some results
> when I'm comparing cpu usages between same python code in embedded mode and
> standalone mode ( python name_script.py )
>> This last months I have been writing a program in c like to mod_python for
> embedding python language, it's a middleware for dispatch and execute python
> batch programs into several nodes. Now I'm writing some python program for
> test how scale this into several nodes and comparing with "standalone"
> performance.
>> I found a very strange problem with one application named md5challenge, this
> aplication try to calculate the max number md5 digest in several seconds,
> md5challenge use a simple signal alarm for stop program when time has
> passed. This is the code of python script
>> _nrdigest = 0
> _const_b = 20
> _f = None
> _signal = False
>>> def handler_alrm(signum, frame):
> global _signal
> global _nrdigest
> global _f
>>> _signal = True
>> def try_me():
> global _nrdigest
> global _f
> global _signal
>> _f = open("/dev/urandom","r")
> while _signal is not True:
> buff = _f.read(_const_b)
> md5.md5(buff).hexdigest()
> _nrdigest = _nrdigest + 1
>> if _f is not None :
> _f.close()
>> # Define entry point with one input variable
> # req is a instance of Request object, usefull members of this object are:
> # req.input is a dictionary with input.xml variables
> # req.constants is a dictionary with constants defined into signature.xml
> # req.output is void dictionary for full with output variables
> # req.config is a dictionary with config values take from namespace
> # req.apdn_pid is a pid of aplication
>>> def main( req ):
> global _nrdigest
>>> signal.signal(signal.SIGALRM, handler_alrm)
> signal.alarm(req.input['time'])
>> try_me()
>> req.output['count'] = _nrdigest
>> return req.OK
>>> if __name__ == "__main__":
>> # test code
> class test_req:
> pass
>> req = test_req()
> req.input = { 'time' : 10 }
> req.output = { 'ret' : 0, 'count' : 0 }
> req.OK = 1
>> main(req)
>> print "Reached %d digests" % req.output['count']
>>> When I try to run this program in standalone into my Pentium Dual Core
> md5challenge reached 1.000.000 milion keys in 10 seconds but when i try to
> run this code in embedded mode md5challenge reached about 200.000 more keys
> !!! I repeat this test many times and always wins embedded mode !!!
> What's happen ?
>> Also I tested to erase read dependencies from /dev/random, and calculate all
> keys from same buffer. In this case embedded mode win always also, and the
> difference are more bigger !!!
>> The alarm time expires in both case in 10 seconds.
>> Thks to all, can anybody help to me for understand this results ?
>> --
> Pau Freixes
> Linux GNU/User
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe:
> http://mail.python.org/mailman/options/python-dev/guido%40python.org
>>
-- 
--Guido van Rossum (home page: http://www.python.org/~guido/)


More information about the Python-Dev mailing list

AltStyle によって変換されたページ (->オリジナル) /