Ok this experiment works fine because it doesn't have any decorator &
generator.
Here is the actual method (with @inlineCallback and generator) where I
see method(my_daemon_fun) being profiled with @profile decorator is not
being profiled.
I am doubting that *generator* or *inlineCallback* decorator is
prohibiting the correct code from getting profiled.
To profile the code all I need to do is:
STEP#1 -> decorate the _monitor_daemons() with "profile" decorator #1
STEP#2 -> start memory profiling
STEP#3 ->* *end memory profiling
Something like this:
@profile => STEP#1
@inlineCallbacks
def my_daemon_fun(self):
"""
Monitor my daemons
"""
if self.running == True:
try:
hp = hpy() => STEP#2
before = hp.heap()
yield self._lock.acquire()
.....
if ((x_running == False) or (b_running == False)):
log.error('Daemons are not running, restarting...')
yield self._restart_daemons()
except:
log.exception('Exception restarting daemons')
finally:
yield self._lock.release()
reactor.callLater(MY_DAEMON_MONITOR_INTERVAL,
self.my_daemon_fun)
after = hp.heap() => STEP#3
leftover = after - before
Now we run the script to call method: my_daemon_fun(). After running the
script though we see memory profiling happening but the function being
profiled is *not* the one we decorated with @profile:
Line # Mem usage Increment Line Contents
1176 42.3 MiB 0.0 MiB def unwindGenerator(*args, **kwargs):
1177 42.3 MiB 0.0 MiB try:
1178 42.3 MiB 0.0 MiB gen = f(*args, **kwargs)
1183 42.3 MiB 0.0 MiB if not isinstance(gen,
types.GeneratorType):
1187 42.3 MiB 0.0 MiB return _inlineCallbacks(None,
gen, Deferred())
I am investigating why the actual function(i.e. my_daemon_fun()) was not
profiled? Meanwhile if you can help us here that would be great.
Regards
Vikas
On 21/10/15 7:07 pm, Vikas wrote:
Hi,
I am trying to instrument method: run() for memory profiling(I am
using memory_profiler & guppy tools for this). All I need to do is
decorate the run() with "profile" decorator and mention *start* and
*end* of memory profiling.
@profile
def run():
d = {}
l = []
hp = hpy()
before = hp.heap() => *start* memory profiling from here
d["k1"] = 'val1'
d["k2"] = 10
count = 0
while (count < 9):
l.append(count)
print 'The count is:', count
count = count + 1
print "Good bye!"
after = hp.heap() => *end* memory profiling here
leftover = after - before
print leftover
del hp
So far works fine. But moment I introduce @inlineCallbacks before
@profile(see below), I don't see memory getting profiled. Am I doing
something wrong here?
@inlinecallbacks
@profile
def run():
....
Regards
Vikas
_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python