Friday, 24 January 2014

How to synchronize the thread in python


In previous post you have seen Simple thread and Threading using python. Now  all threads asynchronous  which means if you run 2 thread it will go simultaneously and indendently. it  cannot wait for other one that is called asynchronous.

So for that we use synchronous locking mechanism, it will take every Thread after complete one by one.

  • The acquire(blocking) method of the new lock object would be used to force threads to run synchronously. The optional blocking parameter enables you to control whether the thread will wait to acquire the lock.

  • If blocking is set to 0, the thread will return immediately with a 0 value if the lock cannot be acquired and with a 1 if the lock was acquired. If blocking is set to 1, the thread will block and wait for the lock to be released.

  • The release() method of the the new lock object would be used to release the lock when it is no longer required.

Example

 

#!/usr/bin/python

import threading
import time

class StartThread (threading.Thread):
    def __init__(self, threadID, name, counter):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.counter = counter
    def run(self):
        print "Starting " + self.name
        # Get lock to synchronize threads
        threadLock.acquire()
        check_time(self.name, self.counter, 3)
        # Free lock to release next thread
        threadLock.release()

def check_time(threadName, delay, counter):
    while counter:
        time.sleep(delay)
        print "%s: %s" % (threadName, time.ctime(time.time()))
        counter -= 1

threadLock = threading.Lock()
threads = []

# Create new threads
thread1 = StartThread (1, "Thread-1", 1)
thread2 = StartThread (2, "Thread-2", 2)

# Start new Threads
thread1.start()
thread2.start()

# Add threads to thread list
threads.append(thread1)
threads.append(thread2)

# Wait for all threads to complete
for t in threads:
    t.join()
print "Exiting Main Thread"
When the above code is executed, it produces the following result:
Starting Thread-1
Starting Thread-2
Thread-1: Thu Mar 21 09:11:28 2013
Thread-1: Thu Mar 21 09:11:29 2013
Thread-1: Thu Mar 21 09:11:30 2013
Thread-2: Thu Mar 21 09:11:32 2013
Thread-2: Thu Mar 21 09:11:34 2013
Thread-2: Thu Mar 21 09:11:36 2013
Exiting Main Thread
Thanks Guys

No comments:

Post a Comment