returning a value from a thread

Jeff Shannon jeff at ccvcorp.com
Wed Jul 14 17:02:52 EDT 2004


Christopher T King wrote:

>How about:
>
>blocking_IO_thread = threading.Thread(target=blocking_IO_func)
>blocking_IO_thread.run()
>somestuff()
>someotherstuff()
>blocking_IO_thread.join()
>
>or:
>
>workerthread = threading.Thread(target=somefunc)
>workerthread.run()
>do_screen_updates()
>wait_for_user_request()
>workerthread.join()
>
>Neither of those needs multiple processors to show (possibly huge)  
>performance gains.  
>

Hmmm... I suppose so, although it seems to me that in most cases, you 
will be waiting for multiple chunks of blocking IO (in which case the 
worker thread should feed them through a queue for the main thread to 
process as they arrive), or needing to do an arbitrary number of screen 
updates / other user requests before the thread is finished (i.e., the 
"responsive UI" case I mentioned).  The blocking IO case does have some 
merit, I'll admit -- I may be somewhat biased by the problems I've been 
working on, where blocking IO hasn't been an issue, so I didn't consider 
this.  (I still have to say that I can't imagine *many* cases where one 
would have background processing where a specific number of UI 
interactions is appropriate -- if you need UI updates, then you're 
probably going to need an arbitrary number of them, in which case you 
need to check whether the thread is done rather than wait for it -- but 
I suppose that such cases may exist.)

>Either way, I didn't make this problem up: the OP
>asked how to get a value back from a thread (a reasonable thing to do),
>not whether doing such a thing was the correct way to code his problem
>(which I have no reason to doubt).
>  
>

You did, however, give an answer that will only work effectively in a 
particular subset of cases that fit the OP's description, without being 
specific about those limitations.  It may well be that your solution 
will work for the OP, but since this list is archived and frequently 
searched, it's always good to explain *why* a given solution works or 
doesn't work.  The OP is not the only person who'll be reading, so it is 
(at least IMO) beneficial to speak to a somewhat more general case, or 
at least to be clear about what cases one *is* speaking to.

Jeff Shannon
Technician/Programmer
Credit International





More information about the Python-list mailing list