php 遞迴部門生成json陣列
阿新 • • 發佈:2021-12-08
執行緒
執行緒(thread[θred])是作業系統能夠進行運算排程的最小單位。他包含在程序中,是程序中的實際運作單位。一條執行緒指的是程序中一個單一順序的控制流,一個程序中可以併發多個執行緒,每條執行緒並行執行不同的任務。
Threading
thread模組已被廢棄,可以使用threading模組代替。所以,在 Python3 中不能再使用"thread" 模組。為了相容性,Python3 將 thread 重新命名為 "_thread"。
_thread.start_new_thread ( function, args[, kwargs] )
引數說明:
- function - 執行緒函式。
- args - 傳遞給執行緒函式的引數,他必須是個tuple型別。
- kwargs - 可選引數。
threading 模組提供的方法:
- threading.currentThread(): 返回當前的執行緒變數。
- threading.enumerate(): 返回一個包含正在執行的執行緒的list。正在執行指執行緒啟動後、結束前,不包括啟動前和終止後的執行緒。
- threading.activeCount(): 返回正在執行的執行緒數量,與len(threading.enumerate())有相同的結果。
- Thread類來處理執行緒
-
- run():用以表示執行緒活動的方法。
- start():
- join([time]):等待至執行緒中止。這阻塞呼叫執行緒直至執行緒的join() 方法被呼叫中止-正常退出或者丟擲未處理的異常-或者是可選的超時發生。
- isAlive():返回執行緒是否活動的。
- getName():返回執行緒名。
- setName():設定執行緒名。
執行緒同步
如果倆個執行緒對共同的資料進行修改就需要使用到執行緒同步。
這裡要使用到鎖的概念。鎖,簡單來講就是將同用資料鎖定,關小黑屋。
使用acquire[əˈkwaɪər](關鎖),release[rɪˈliːs](開鎖)
#!/usr/bin/python3 import threading import timeclass myThread (threading.Thread): #繼承Thread def __init__(self, threadID, name, counter): #初始化 threading.Thread.__init__(self) #呼叫父類初始化 self.threadID = threadID # 執行緒ID self.name = name #執行緒名 self.counter = counter #同用變數 def run(self): print ("開啟執行緒: " + self.name) # 獲取鎖,用於執行緒同步,此時會對同用資料鎖定,其他執行緒無法操作次變數,陷入等待 threadLock.acquire() print_time(self.name, self.counter, 3) #呼叫操作函式 # 釋放鎖,開啟下一個執行緒 threadLock.release() def print_time(threadName, delay, counter): #定義操作函式 while counter: time.sleep(delay) print ("%s: %s" % (threadName, time.ctime(time.time()))) 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 ("退出主執行緒")