how to get the return value of a thread?
Fredrik Lundh
fredrik at pythonware.com
Fri Sep 9 08:37:25 EDT 2005
Leo Jay wrote:
> i would like to get the return value of all threads
>
> e.g.
> def foo(num):
> if num>10:
> return 1
> elif num>50:
> return 2
> else
> return 0
>
>
> after i invoked
> t = thread.start_new_thread(foo,(12,))
> how to get the return value of `foo'?
threads are subprograms, not functions. to allow a thread to generate values,
create a shared Queue object and let your threads add stuff to that queue. an
example:
import threading
import Queue
import time, random
class Worker(threading.Thread):
def __init__(self, index, queue):
self.__index = index
self.__queue = queue
threading.Thread.__init__(self)
def run(self):
# pretend we're doing something that takes 10-100 ms
time.sleep(random.randint(10, 100) / 1000.0)
# pretend we came up with some kind of value
self.__queue.put((self.__index, random.randint(0, 1000)))
queue = Queue.Queue()
for i in range(10):
Worker(i, queue).start() # start a worker
for i in range(10):
print "worker %d returned %d" % queue.get()
</F>
More information about the Python-list
mailing list