[EMAIL PROTECTED] a écrit :
> Hello Folks,
>
> My first posting here and I am a stuck in figuring out the exact way
> to update a global variable from within a function that doesnt return
> any value (because the function is a target of the thread and I dont
> know how exactly return would work in such a case). I am sure I am
> missing something very fundamental here. The essential pieces of my
> code that cause the problem would be something like this:
> ---------------------------------------------
> lookuptab = {'1.9.7.3':'Bangkok','1.9.60.3':'Sydney'}
>
> results = {}
>
> for val in lookuptab.values():
> results[val]=0
>
> def testt(loc):
> global results
> results[loc] = 1
> return results[loc]
>
> for x in lookuptab.values():
> thread = threading.Thread(target=testt,args=(x))
> thread.start()
> print results
> -------------------------------------------------------
"Would be" ?
I had to fix a couple problems to get your code running (namely,
importing threading and passing correct args to threading.Thread). Do
yourself a favour: next time, take time to post *working* code.
Anyway... Here's a (corrected) version with a couple prints here and
there. I think the output is clear enough:
import threading
import time
lookuptab = {'1.9.7.3':'Bangkok','1.9.60.3':'Sydney'}
results = dict((val, 0) for val in lookuptab.values())
def testt(loc):
global results
print "t-%s before: %s" % (loc,results)
results[loc] = 1
print "t-%s after: %s" % (loc,results)
def main():
for x in lookuptab.values():
thread = threading.Thread(target=testt,args=(x,))
thread.start()
print "main - no sleep: %s" % results
time.sleep(1)
print "main - 1s later : %s" % results
if __name__ == '__main__': main()
And the output is:
main - no sleep: {'Bangkok': 0, 'Sydney': 0}
t-Bangkok before: {'Bangkok': 0, 'Sydney': 0}
t-Bangkok after: {'Bangkok': 1, 'Sydney': 0}
t-Sydney before: {'Bangkok': 1, 'Sydney': 0}
t-Sydney after: {'Bangkok': 1, 'Sydney': 1}
main - 1s later : {'Bangkok': 1, 'Sydney': 1}
Now if I may give you an advice about threads and globals (or any other
kind of shared state): learn about semaphores. While this may not be an
issue in this snippet, race conditions is definitively something you
want to avoid whenever possible and cleanly handle else.
HTH
--
http://mail.python.org/mailman/listinfo/python-list