Getting different result in different runs with multithreading
Question: why when the code executed, the result different every time?

i tried to follow how the code is executed, and i confused, i feel this is not
sense.

and the result appear randomly every time

    
    
    #!/usr/bin/python
    
    import Queue
    import threading
    import time
    
    exitFlag = 0
    
    class myThread (threading.Thread):
        def __init__(self, threadID, name, q):
            threading.Thread.__init__(self)
            self.threadID = threadID
            self.name = name
            self.q = q
        def run(self):
            print "Starting " + self.name
            process_data(self.name, self.q)
            print "Exiting " + self.name
    
    def process_data(threadName, q):
        while not exitFlag:
            queueLock.acquire()
            if not workQueue.empty():
                data = q.get()
                queueLock.release()
                print "%s processing %s" % (threadName, data)
            else:
                queueLock.release()
            time.sleep(1)
    
    threadList = ["Thread-1", "Thread-2", "Thread-3"]
    nameList = ["One", "Two", "Three", "Four", "Five"]
    queueLock = threading.Lock()
    workQueue = Queue.Queue(10)
    threads = []
    threadID = 1
    
    # Create new threads
    for tName in threadList:
        thread = myThread(threadID, tName, workQueue)
        thread.start()
        threads.append(thread)
        threadID += 1
    
    # Fill the queue
    queueLock.acquire()
    for word in nameList:
        workQueue.put(word)
    queueLock.release()
    
    # Wait for queue to empty
    while not workQueue.empty():
        pass
    
    # Notify threads it's time to exit
    exitFlag = 1
    
    # Wait for all threads to complete
    for t in threads:
        t.join()
    print "Exiting Main Thread"
    

code source <http://www.tutorialspoint.com/python/python_multithreading.htm>

* * *

**update**

Sorry, i mean the order of result

like this:

    
    
    Starting Thread-1
    Starting Thread-2
    Starting Thread-3
    Thread-3 processing One
    Thread-2 processing Two
    Thread-1 processing Three
    Thread-3 processing Four
    Thread-2 processing Five
    Exiting Thread-1
    Exiting Thread-3
    Exiting Thread-2
    Exiting Main Thread
    [Finished in 3.0s]
    

and when try again, the result

    
    
    Starting Thread-1
    Starting Thread-2
    Starting Thread-3
    Thread-3 processing One
    Thread-2 processing Two
    Thread-1 processing Three
    Thread-3 processing Four
    Thread-3 processing Five
    Exiting Thread-1
    Exiting Thread-2
    Exiting Thread-3
    Exiting Main Thread
    [Finished in 3.0s]
    


Answer: I assume, by "result" you mean the execution order. One idea behind
mutithreading is, that you don't have to care about execution order unless you
want to specify it explicitely. You are totally dependent on the underlying
operating system, system load, ... etc.

