1、Python线程同步
如果多个线程共同对某个数据修改,则可能出现不可预料的结果,为了保证数据的正确性,需要对多个线程进行同步。
使用Thread对象的Lock和Rlock可以实现简单的线程同步,这两个对象都有acquire方法和release方法,对于那些需要每次只允许一个线程操作的数据,可以将其操作放到acquire和release方法之间。
2、实例
# -*- coding: UTF-8 -*-
import threading
import time
class myThread(threading.Thread): # 继承父类threading.Thread
def __init__(self, name, delay, counter):
threading.Thread.__init__(self)
self.name = name
self.delay = delay
self.counter = counter
def run(self): # 把要执行的代码写到run函数里面,线程在创建后会直接运行run函数
print "Starting " + self.name
threadLock.acquire()
print_time(self.name, self.delay, self.counter)
threadLock.release()
print "Exiting " + self.name
def print_time(name, delay, counter):
while counter:
time.sleep(delay)
print "%s: %s" % (name, time.ctime(time.time()))
counter -= 1
threadLock = threading.Lock()
threads = []
# 创建新线程
thread1 = myThread("Thread-1", 1, 5)
thread2 = myThread("Thread-2", 2, 5)
# 开启线程
thread1.start()
thread2.start()
# 添加线程到线程列表
threads.append(thread1)
threads.append(thread2)
# 等待所有线程完成
for t in threads:
t.join()
运行结果:
Starting Thread-1
Starting Thread-2
Thread-1: Thu Jul 27 15:26:32 2017
Thread-1: Thu Jul 27 15:26:33 2017
Thread-1: Thu Jul 27 15:26:34 2017
Thread-1: Thu Jul 27 15:26:35 2017
Thread-1: Thu Jul 27 15:26:36 2017
Exiting Thread-1
Thread-2: Thu Jul 27 15:26:38 2017
Thread-2: Thu Jul 27 15:26:40 2017
Thread-2: Thu Jul 27 15:26:42 2017
Thread-2: Thu Jul 27 15:26:44 2017
Thread-2: Thu Jul 27 15:26:46 2017
Exiting Thread-2