[Stackless] Access to local variables of a task from tasklet

Jeff Senn senn at maya.com
Thu Jun 18 14:53:41 CEST 2009


This simplest way to do this is to use a channel -- in fact it's
pretty much exactly why they exist -- that is: so you don't have
to think about the scheduling of (and race-conditions between)
communicating tasklets:

--------------

import stackless
chan1 = stackless.channel()

def myTask1(chan):
     # stuff...
     localVar1 = "something"
     chan.send(localVar1)
     x = chan.receive() #block until t2 tells us to resume
     # stuff...

def myTask2(chan):
     myLocal = chan.receive()
     # stuff...
     chan.send(None) #resume task 1

stackless.tasklet(myTask1)(chan1)
stackless.tasklet(myTask2)(chan1)
stackless.run()

-----
Or you could make a more general recipe by using 2 channels (myTask1  
makes
a new channel to resume and sends the channel with localVar1 to  
myTask2).

Pardon me if you were contemplating something more sneaky and
this was too obvious...

-Jas


On Jun 18, 2009, at 3:49 AM, Najem Karim wrote:

>
> Hello,
>
> I have the following question:
> Is there a way to access the local variables
> of a tasklet.
>
> I will explain with an example:
>
> I have a task say:
>
> def myTask1()
> 	localvar1 = 10
> 	....
>
> I use it to create a tasklet say:
> myTasklet1 = stackless.tasklet(myTask1)()
>
> then run it with:
> myTasklet1 = stackless.run(1)
> to run one instruction and return.
>
> Is possible now to use myTasklet1 to check/get the value of localvar1
>
> I need this because at this point I would like to run another task  
> which
> needs the current value localvar1 as input parameter
>
> say:
> def myTask2(var1)
> 	....
> 	pass
>
> Now get the value of localvar1 from myTasklet1 and store it in var1
> then remove myTasklet1 from the list using:
> myTasklet1.remove()
>
> then create and run the second tasklet untill the end using:
> myTasklet2 = stackless.tasklet(myTask2)(var1)
> stackless.run()
>
> Once myTasklet2 is done, I resume myTasklet1 were it stopped before  
> using
> myTasklet2.insert()
> myTasklet1 = stackless.run(1)
>
> then repeat allover again until myTasklet1 is finished
>
> Is there a way to do this.
>
> I appreciate any help.
>
> Thanks
>
>
>
>
> _______________________________________________
> Stackless mailing list
> Stackless at stackless.com
> http://www.stackless.com/mailman/listinfo/stackless
>





More information about the Stackless mailing list