python 线程同步_Python 线程同步
zhoushixiong
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):
print self.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
[Thu Nov 22 16:04:13 2018] Thread-1 修改第 12 個值,修改后值為:1
[Thu Nov 22 16:04:14 2018] Thread-1 修改第 11 個值,修改后值為:1
[Thu Nov 22 16:04:15 2018] Thread-1 修改第 10 個值,修改后值為:1
[Thu Nov 22 16:04:16 2018] Thread-1 修改第 9 個值,修改后值為:1
[Thu Nov 22 16:04:17 2018] Thread-1 修改第 8 個值,修改后值為:1
[Thu Nov 22 16:04:18 2018] Thread-1 修改第 7 個值,修改后值為:1
[Thu Nov 22 16:04:19 2018] Thread-1 修改第 6 個值,修改后值為:1
[Thu Nov 22 16:04:20 2018] Thread-1 修改第 5 個值,修改后值為:1
[Thu Nov 22 16:04:21 2018] Thread-1 修改第 4 個值,修改后值為:1
[Thu Nov 22 16:04:22 2018] Thread-1 修改第 3 個值,修改后值為:1
[Thu Nov 22 16:04:23 2018] Thread-1 修改第 2 個值,修改后值為:1
[Thu Nov 22 16:04:24 2018] Thread-1 修改第 1 個值,修改后值為:1
[Thu Nov 22 16:04:26 2018] Thread-2 修改第 12 個值,修改后值為:2
[Thu Nov 22 16:04:28 2018] Thread-2 修改第 11 個值,修改后值為:2
[Thu Nov 22 16:04:30 2018] Thread-2 修改第 10 個值,修改后值為:2
[Thu Nov 22 16:04:32 2018] Thread-2 修改第 9 個值,修改后值為:2
[Thu Nov 22 16:04:34 2018] Thread-2 修改第 8 個值,修改后值為:2
[Thu Nov 22 16:04:36 2018] Thread-2 修改第 7 個值,修改后值為:2
[Thu Nov 22 16:04:38 2018] Thread-2 修改第 6 個值,修改后值為:2
[Thu Nov 22 16:04:40 2018] Thread-2 修改第 5 個值,修改后值為:2
[Thu Nov 22 16:04:42 2018] Thread-2 修改第 4 個值,修改后值為:2
[Thu Nov 22 16:04:44 2018] Thread-2 修改第 3 個值,修改后值為:2
[Thu Nov 22 16:04:46 2018] Thread-2 修改第 2 個值,修改后值為:2
[Thu Nov 22 16:04:48 2018] Thread-2 修改第 1 個值,修改后值為:2
主進程結束!
Thread-1 線程結束!
Thread-2 線程結束!
不加鎖時同樣是上面實例的代碼,注釋以下兩行代碼:
threadLock.acquire()
threadLock.release()
輸出結果為:
開始線程: Thread-1
開始線程: Thread-2
[Thu Nov 22 16:09:20 2018] Thread-1 修改第 12 個值,修改后值為:1
[Thu Nov 22 16:09:21 2018] Thread-2 修改第 12 個值,修改后值為:2
[Thu Nov 22 16:09:21 2018] Thread-1 修改第 11 個值,修改后值為:1
[Thu Nov 22 16:09:22 2018] Thread-1 修改第 10 個值,修改后值為:1
[Thu Nov 22 16:09:23 2018] Thread-1 修改第 9 個值,修改后值為:1
[Thu Nov 22 16:09:23 2018] Thread-2 修改第 11 個值,修改后值為:2
[Thu Nov 22 16:09:24 2018] Thread-1 修改第 8 個值,修改后值為:1
[Thu Nov 22 16:09:25 2018] Thread-2 修改第 10 個值,修改后值為:2
[Thu Nov 22 16:09:25 2018] Thread-1 修改第 7 個值,修改后值為:1
[Thu Nov 22 16:09:26 2018] Thread-1 修改第 6 個值,修改后值為:1
[Thu Nov 22 16:09:27 2018] Thread-2 修改第 9 個值,修改后值為:2
[Thu Nov 22 16:09:27 2018] Thread-1 修改第 5 個值,修改后值為:1
[Thu Nov 22 16:09:28 2018] Thread-1 修改第 4 個值,修改后值為:1
[Thu Nov 22 16:09:29 2018] Thread-2 修改第 8 個值,修改后值為:2
[Thu Nov 22 16:09:29 2018] Thread-1 修改第 3 個值,修改后值為:1
[Thu Nov 22 16:09:30 2018] Thread-1 修改第 2 個值,修改后值為:1
[Thu Nov 22 16:09:31 2018] Thread-2 修改第 7 個值,修改后值為:2
[Thu Nov 22 16:09:31 2018] Thread-1 修改第 1 個值,修改后值為:1
[Thu Nov 22 16:09:33 2018] Thread-2 修改第 6 個值,修改后值為:2
[Thu Nov 22 16:09:35 2018] Thread-2 修改第 5 個值,修改后值為:2
[Thu Nov 22 16:09:37 2018] Thread-2 修改第 4 個值,修改后值為:2
[Thu Nov 22 16:09:39 2018] Thread-2 修改第 3 個值,修改后值為:2
[Thu Nov 22 16:09:41 2018] Thread-2 修改第 2 個值,修改后值為:2
[Thu Nov 22 16:09:43 2018] Thread-2 修改第 1 個值,修改后值為:2
主進程結束!
Thread-1 線程結束!
Thread-2 線程結束!
總結
以上是生活随笔為你收集整理的python 线程同步_Python 线程同步的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows下安装mysql 开机启动
- 下一篇: python异步和多线程_Python