[wingide-users] Debugging overridden Stackless Tasklets

Simon Pickles sipickles at googlemail.com
Sun May 25 11:45:56 MDT 2008


Hello,

Me again, harassing you about stackless python support.

First my platform and versions:

Ubuntu Hardy 8.04 x64
Python 2.5.2 Stackless 3.1b3 060516 (release25-maint:63223, May 14 2008, 
20:29:45)
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)]
Wing IDE personal 3.1.1-1 (rev 18164)

WingIDE has been working really well debugging stackless tasklets now.

I have, however, come across a small problem I hoped you might be able 
to help me with.

If I extend stackless by inheriting from a tasklet, the debugging no 
longer works. Here is an example program, two tasklets are run, one 
using stackless.tasklet, the other using stacklessPlus.NamedTasklet (The 
create function switches back to stackless.tasklets if no name is 
supplied):

#stacklessPlus.py
#Stackless enhancements
import stackless

class NamedTasklet(stackless.tasklet):
   __slots__ = [ "name" ]

   def __str__(self):
       return "<NamedTasklet(%s)>" % self.name
     def __call__(self, *args, **kwargs):
       oldFunction = self.tempval
       def newFunction(oldFunction, args, kwargs):
           print "%s has just been run. (%d runnable)" % (str(self), 
stackless.getruncount())
           try:
               oldFunction(*args, **kwargs)
           except Exception, e:
               print "Exception in %s" % str(self)
               raise e
           print "%s returned" % str(self)
                  self.tempval = newFunction
       stackless.tasklet.setup(self, oldFunction, args, kwargs)
       return self


def CreateNamedTasklet(name, func, *args, **kwargs):
   if name is None:
       return stackless.tasklet(func)(*args, **kwargs)
   t = NamedTasklet(func)(*args, **kwargs)
   t.name = name
 
   return t

#------------------------------------
#testNamedTasklets.py
import stackless
import stacklessPlus

def DoPrint(s):
   i = 0
   while 1:
       print "%s:%d" % (s, i)
       i += 1
       stackless.schedule()
       if i == 3:
           return
      if __name__ == "__main__":
   #TaskletA
   stacklessPlus.CreateNamedTasklet(None, DoPrint, "A")
   #TaskletB
   stacklessPlus.CreateNamedTasklet("TaskletB", DoPrint, "B")
   stackless.run()

#---------------------------------------
Output:

A:0
<NamedTasklet(TaskletB)> has just been run. (2 runnable)
B:0
A:1
B:1
A:2
B:2
<NamedTasklet(TaskletB)> returned

#------------------------------------

All runs fine. Putting a breakpoint in the DoCount function will only 
break during TaskletA.

Is there anyway I can educate WingIDE?

Thanks

Simon Pickles




More information about the wingide-users mailing list