1.多程序的優勢:為了同步完成多項任務,通過提高資源使用效率來提高系統的效率。
2.檢視執行緒數:threading.enumerate()函式便可以看到當前執行緒的數量。
3.檢視當前執行緒的名字:threading.current_thread()可以看到當前執行緒的資訊。
4.類可以繼承 threading.thread
# import threading
# import time
# class codingthread(threading.thread):
# def run(self):
# for x in range(3):
# print('正在寫指令碼:%s'%threading.current_thread())
# time.sleep(1)
# class modelthread(threading.thread):
# def run(self):
# for x in range(3):
# print('正在建立模型:%s'%threading.current_thread())
# time.sleep(1)
# # 主線程入口
# def main():
# t1 = codingthread()
# t2 = modelthread()
# t1.start()
# t2.start()
# if __name__ == '__main__':
# main()
# 多執行緒共享全域性變數的問題:
多執行緒都是在同乙個程序中執行的。因此在程序中的全域性變數所有執行緒都是可共享的。
這就造成了乙個問題,因為執行緒執行的順序是無序的。有可能會造成資料錯誤。
# import threading
# values = 0
# 全域性變數使用執行緒時,避免資料不出現亂序,則加上鎖
# glock = threading.lock()
# def get_ticket():
# global values
# # 加鎖
# glock.acquire()
# for x in range(100000):
# values += 1
# # 解鎖
# glock.release()
# print('values:%d' % values)
# def main():
# for x in range(3):
# t = threading.thread(target=get_ticket)
# t.start()
# 應該列印出來是: 100000,200000,300000
# 實際列印出來是: 100000,124976,224976
# 所有使用到threading.lock
加上鎖後返回的值:
values:100000
values:200000
values:300000
# if __name__ == '__main__':
# main()
# lock版本生產者和消費者模式:
生產者和消費者模式是多執行緒開發中經常見到的一種模式。
生產者的執行緒專門用來生產一些資料,然後存放到乙個中間的變數中。
消費者再從這個中間的變數中取出資料進行消費。
但是因為要使用中間變數,中間變數經常是一些全域性變數,因此需要使用鎖來保證資料完整性。
使用threading.lock鎖實現的「生產者與消費者模式」的乙個例子:
import threading
import random
import time
gmoney = 1000
glock = threading.lock()
# 記錄生產者生產的次數,達到10次就不再生產
gtime = 0
# 生產者
class producer(threading.thread):
def run(self):
global gmoney
global gtime
while true:
money = random.randint(100,1000)
glock.acquire()
if gtime >= 10:
# 解鎖返回
glock.release()
break
gmoney += money
print('%s存入了%d元錢,還剩%d元錢'%(threading.current_thread(),money,gmoney))
time.sleep(0.5)
gtime += 1
glock.release()
# 消費者
class consumer(threading.thread):
def run(self):
global gmoney
global gtime
while true:
money = random.randint(100, 1000)
glock.acquire()
if gmoney > money:
gmoney -= money
print('%s消費了%d元錢,還剩%d元錢' % (threading.current_thread(), money, gmoney))
time.sleep(0.5)
else:
# 如果錢不夠了,有可能是已經超過了次數,這時候就判斷一下
if gtime >= 10:
glock.release()
break
print('%s消費了%d元錢,還剩%d元錢,不足!!!' % (threading.current_thread(), money, gmoney))
glock.release()
def main():
for x in range(3):
c1 = consumer(name='消費者執行緒數%s'%x)
c1.start()
for x in range(5):
p1 = producer(name='生產者執行緒數%s'%x)
p1.start()
if __name__ == '__main__':
main()
python鎖機制 python 鎖機制
當有兩個或跟多個執行緒或程序需要操作乙個變數或程序時,會出現意想不到的結果,這是因為執行緒或程序時迸發進行的,對同意變數或檔案操作時,會出現同時對其操作,從到導致邏輯錯誤。bin usr env python coding utf 8 import multiprocessing import ti...
python鎖機制 python的鎖機制
鎖 lock lock 指令鎖 是可用的最低階的同步指令。lock處於鎖定狀態時,不被特定的執行緒擁有。lock包含兩種狀態 鎖定和非鎖定,以及兩個基本的方法。可以認為lock有乙個鎖定池,當執行緒請求鎖定時,將執行緒至於池中,直到獲得鎖定後出池。池中的執行緒處於狀態圖中的同步阻塞狀態。構造方法 l...
python多執行緒鎖機制
在多執行緒程式設計中常用到的乙個概念就是鎖,它用於將執行緒需要獨佔的資源進行加鎖,使用後再進行釋放,防止死鎖發生。此處給出乙個不加鎖的多執行緒例子 實現整數n在每個執行緒內加1並列印 usr bin python coding utf 8 import threading import time c...