[Tutor] Another question about Variables in Threaded functions

lonetwin lonetwin@yahoo.com
Mon, 15 Oct 2001 15:57:25 +0530

Hi all,
    I asked a question a couple o' days back about class variables when one 
uses threads...an' I learned (thanx to Boudewijn and Kirby) about locking 
...now I want to know this ...suppose I call a function from the run() method 
of my threaded class...and pass to it a local (local to run()) variable,
a) how should I be doing this ?? (what should I keep in mind ??)
b) what happens to these local variable (and to the local variables of the 
function being called) ??..are these too shared between threads ??

OK...Ok.... I know I'm not too good at framing questions....so like I did 
earlier ..here's some pseudo-code:
import threading
import time

class ThreadedFoo(threading.Thread):
    FooBox = range(100)
    def __init__(self, lock):
        self.lock = lock

    def run(self):
        print "Started ", self.getName()
        while 1:
                if len(self.FooBox) == 0:
                Goody = self.FooBox.pop()  # Is Goody shared ?? I think not
                                           # Am I wrong ??
                self.doStuff(Goody)        # what happens here ??

    def doStuff(self, thingy):
        BoxOStuff = ['pink', 'yellow', 'green', 'blue', 'red' ]
        # Is ^^^^ this shared ?? ...again I don't think so..but I'm not sure
        for item in BoxOStuff:       # What is happening here ??
            print self.getName(), thingy, item

if __name__ == '__main__':
    FooThreadBag = []
    SharedLock = threading.Lock()
    for x in range(3):
        thread = ThreadedFoo(SharedLock)

    for thread in FooThreadBag:

    print "done"

    So, that's it...Kirby's explanation leads me to believe that 'Goody'
and 'BoxOStuff' are not shared....but I want someone to actually tell me 
that...anyways, thanx for your time.


Every oak tree started out as a 
couple of nuts who stood their ground.