python學習筆記--7.python中的多執行緒
阿新 • • 發佈:2018-12-10
這是在學習Python的時候做的筆記,有些時間了,大概是按照一本挺實用的入門書籍學的,我學習程式設計的思路一般是掌握基礎的變數型別,語法-分支結構 函式呼叫 類建立 結構體定義,記錄一些簡單的例項,剩下的就是需要用什麼百度現學。
對我來說python的優勢是,沒有型別要求,不用宣告,沒有指標,萬能陣列,庫很強大。
多執行緒可以說是一個強大的功能,並行使得效率極大的提高,python中也有好幾種多執行緒的方式
程式碼
from threading import Thread
import threading
import _thread # 用於start new thread
import time
import queue
def printnum(count):
for i in range(1, count):
time.sleep(1)
print(str(i))
print(str(threading.current_thread()))
t1 = Thread(target=printnum, args=(5, ))
t1.start()
t2 = Thread(target=printnum, args=(3, ))
t2.start()
_thread.start_new_thread(printnum, (4 , )) # 必須後面有空位 逗號分開
# region 執行緒的一些方法 和操作
# 一個自定義執行緒 開啟兩個對一個變數進行累加
class MyThread(threading.Thread):
def __init__(self, threadid, name, delay):
threading.Thread.__init__(self)
self.name = name
self.threadid = threadid
self.delay = delay
def run(self):
print("開啟執行緒: " + self.name)
print_time(self.name, self.delay, 3)
def print_time(threadName, delay, counter): # 一個普通的輸出函式
while counter:
time.sleep(delay)
threadLock.acquire()
global count # 加上該句將其變為全域性變數
count = count + 1 # 這裡如果只有這一局會發生錯誤 在函式中修改的被認為區域性變數 沒有定義
threadLock.release()
print('now is ' + str(count))
counter -= 1
threadLock = threading.Lock() # 執行緒鎖 用於鎖定資料 不允許執行緒同時修改
count = 0 # 計數器
t1 = MyThread(1, 'thread-1', 3)
t2 = MyThread(2, 'thread-2', 2)
t1.start()
t2.start()
t1.join() # 堵塞 必須縣執行緒結束才可以繼續下一步
t2.join()
print('finish')
# endregion
# region queen 安全執行緒佇列
# 大概的意思是裡面的資料只有鎖的情況下才可以訪問 所以安全
global cc
cc = 10
def shownum(delay, queen):
queueLock.acquire()
data = queen.get()
queueLock.release()
time.sleep(delay)
print(str(data))
queueLock = threading.Lock()
workqueen = queue.Queue(10)
queueLock.acquire()
workqueen.put(cc)
queueLock.release()
Thread(target=shownum, args=(10, workqueen, )).start()
Thread(target=shownum, args=(1.5, workqueen, )).start()
# endregion