在Python中同步线程
Python随附的线程模块包括一个易于实现的锁定机制,可让您同步线程。通过调用Lock()方法创建一个新锁,该方法返回新锁。
新锁对象的acquire(blocking)方法用于强制线程同步运行。可选的阻塞参数使您可以控制线程是否等待获取锁。
如果将blocking设置为0,则如果无法获取锁,则线程立即返回0值,如果获取锁,则线程立即返回1。如果将阻塞设置为1,则线程将阻塞并等待释放锁。
新的锁对象的release()方法用于在不再需要时释放锁。
示例
#!/usr/bin/python
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
#获取锁以同步线程
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 = []
#创建新线程
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)
# Start new Threads
thread1.start()
thread2.start()
#获取锁以同步线程
threads.append(thread1)
threads.append(thread2)
#等待所有线程完成
for t in threads:
t.join()
print "Exiting Main Thread"执行以上代码后,将产生以下结果-
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