Are min() and max() thread-safe?

Steven D'Aprano steven at REMOVE.THIS.cybersource.com.au
Thu Sep 17 00:33:05 EDT 2009


I have two threads, one running min() and the other running max() over 
the same list. I'm getting some mysterious results which I'm having 
trouble debugging. Are min() and max() thread-safe, or am I doing 
something fundamentally silly by having them walk over the same list 
simultaneously?

My code is as follows. Is there anything obviously wrong with it?


import threading, time

class MMThread(threading.Thread):
    def __init__(self, data, func, target, where):
        super(MMThread, self).__init__()
        self._data = data
        self._func = func
        self._target = target
        self._where = where
    def run(self):
        self._target[self._where] = self._func(self._data)



def minmax(seq):
    result = [None, None]
    t1 = MMThread(seq, min, result, 0)
    t2 = MMThread(seq, max, result, 1)
    t1.start()
    t2.start()
    # Block until all threads are done.
    while any([t1.isAlive(), t2.isAlive()]):
        time.sleep(0)
    assert None not in result
    return tuple(result)





-- 
Steven



More information about the Python-list mailing list