Python Thread Synchronization with the threading Module
Learn how to synchronize threads in Python using the threading
module. Discover how the Lock()
, acquire()
, and release()
methods are used to control thread execution and ensure safe access to shared resources.
Python - Synchronizing Threads
The threading
module in Python includes a simple locking mechanism to synchronize threads. A new lock is created by calling the Lock()
method, which returns the new lock.
The acquire(blocking)
method of the new lock object is used to force the threads to run synchronously. The optional blocking
parameter allows you to control whether the thread waits to acquire the lock.
- If
blocking
is set to0
, the thread returns immediately with a0
value if the lock cannot be acquired and with a1
if the lock was acquired. - If
blocking
is set to1
, the thread blocks and waits for the lock to be released.
The release()
method of the new lock object is used to release the lock when it is no longer required.
Example
The following example demonstrates synchronizing threads using a lock.
Code
import threading
import time
class myThread(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()
print_time(self.name, self.counter, 3)
# Free lock to release next thread
threadLock.release()
def print_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 = myThread(1, "Thread-1", 1)
thread2 = myThread(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")
Output
Starting Thread-1
Starting Thread-2
Thread-1: Thu Jul 13 21:10:11 2023
Thread-1: Thu Jul 13 21:10:12 2023
Thread-1: Thu Jul 13 21:10:13 2023
Thread-2: Thu Jul 13 21:10:15 2023
Thread-2: Thu Jul 13 21:10:17 2023
Thread-2: Thu Jul 13 21:10:19 2023
Exiting Main Thread