thread variable scope with start_new_thread
Luxore
alan.meadows at gmail.com
Thu Nov 10 18:30:33 EST 2005
Hello,
I am trying to create threaded python project and I'm running into some
weird Python variable scoping.
I am using the "thread" module (I know, it's old and I should be using
threading)... but for example:
<code>
import thread
def extract_archive(session, user, archive, dest=None):
job_id = sunlib.job.new(...)
def thread_extract_archive():
if not os.path.exists(archive):
<...do stuff...>
if not os.path.isfile(archive):
<...do stuff...>
if dest == None:
dest = os.path.dirname(archive)
<...do more stuff...>
thread.start_new_thread(thread_extract_archive, ())
return job_id
</code>
It appears that thread_extract_archive() inherits many of the variables
that are passed or defined in extract_archive(). I find this scary,
although very convenient because my thread process needs to reference a
number of items. The problem popped up when I added the "if dest ==
None" bit. Python barks that "dest" is an uninitialized variable.
That would make sense to me, but what I find odd is that
thread_extract_archive() does not have any trouble accessing the
session, user, or archive variables. The only difference is that I
pass these variables to other functions (e.g. os.path.isfile), and I am
doing a simple pythonic test on "dest."
What scares me is that my thread has access to extract_archive()
variables, but only if I access them in a certain way.
Any thoughts? Is there a way to use the more improved "threading"
module and pass my thread the entire variable scope of the parent
process like I am able to do above?
Thanks,
Luxore.
More information about the Python-list
mailing list