Python 线程同步
以下代码可以直观展示加锁和不加锁时,对数据修改情况。
加锁时
# -*-* encoding:UTF-8 -*-
# author : shoushixiong
# date : 2018/11/22
import threading
import time
list =[0,0,0,0,0,0,0,0,0,0,0,0]
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"开始线程:",self.name
# 获得锁,成功获得锁定后返回 True
# 可选的timeout参数不填时将一直阻塞直到获得锁定
# 否则超时后将返回 False
threadLock.acquire()
print_time(self.name,self.counter,list.__len__())
# 释放锁
threadLock.release()
def __del__(self):
printself.name,"线程结束!"
def print_time(threadName,delay,counter):
while counter:
time.sleep(delay)
list[counter-1]+=1
print"[%s] %s 修改第 %d 个值,修改后值为:%d"%(time.ctime(time.time()),threadName,counter,list[counter-1])
counter -=1
threadLock = threading.Lock()
threads =[]
# 创建新线程
thread1 = myThread(1,"Thread-1",1)
thread2 = myThread(2,"Thread-2",2)
# 开启新线程
thread1.start()
thread2.start()
# 添加线程到线程列表
threads.append(thread1)
threads.append(thread2)
# 等待所有线程完成
for t in threads:
t.join()
print"主进程结束!"
输出结果为:
开始线程:Thread-1
开始线程:Thread-2
[ThuNov2216:04:132018]Thread-1修改第12个值,修改后值为:1
[ThuNov2216:04:142018]Thread-1修改第11个值,修改后值为:1
[ThuNov2216:04:152018]Thread-1修改第10个值,修改后值为:1
[ThuNov2216:04:162018]Thread-1修改第9个值,修改后值为:1
[ThuNov2216:04:172018]Thread-1修改第8个值,修改后值为:1
[ThuNov2216:04:182018]Thread-1修改第7个值,修改后值为:1
[ThuNov2216:04:192018]Thread-1修改第6个值,修改后值为:1
[ThuNov2216:04:202018]Thread-1修改第5个值,修改后值为:1
[ThuNov2216:04:212018]Thread-1修改第4个值,修改后值为:1
[ThuNov2216:04:222018]Thread-1修改第3个值,修改后值为:1
[ThuNov2216:04:232018]Thread-1修改第2个值,修改后值为:1
[ThuNov2216:04:242018]Thread-1修改第1个值,修改后值为:1
[ThuNov2216:04:262018]Thread-2修改第12个值,修改后值为:2
[ThuNov2216:04:282018]Thread-2修改第11个值,修改后值为:2
[ThuNov2216:04:302018]Thread-2修改第10个值,修改后值为:2
[ThuNov2216:04:322018]Thread-2修改第9个值,修改后值为:2
[ThuNov2216:04:342018]Thread-2修改第8个值,修改后值为:2
[ThuNov2216:04:362018]Thread-2修改第7个值,修改后值为:2
[ThuNov2216:04:382018]Thread-2修改第6个值,修改后值为:2
[ThuNov2216:04:402018]Thread-2修改第5个值,修改后值为:2
[ThuNov2216:04:422018]Thread-2修改第4个值,修改后值为:2
[ThuNov2216:04:442018]Thread-2修改第3个值,修改后值为:2
[ThuNov2216:04:462018]Thread-2修改第2个值,修改后值为:2
[ThuNov2216:04:482018]Thread-2修改第1个值,修改后值为:2
主进程结束!
Thread-1线程结束!
Thread-2线程结束!