python學習作業筆記十二
阿新 • • 發佈:2019-02-19
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/8/20 17:32 # @Author : # 多執行緒 有兩個庫_thread和threading,_thread是低階模組,threading是高階模組,對_thread進行了封裝。絕大多數情況下,我們只需要使用threading這個高階模組。 import time, threading # 新執行緒執行的程式碼 def loop(): print('thread %s is running...' % threading.current_thread().name) n = 0 while n < 5: n = n + 1 print('thread %s >>> %s ' % (threading.current_thread().name, n)) time.sleep(1) print('thread %s done...' % threading.current_thread().name) if __name__ == '__main__': t = threading.Thread(target=loop, name='LoopThread') t.start() t.join() print('Thread %s ended.' % threading.current_thread().name) #
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/8/20 17:37 # @Author : # 多執行緒和多程序最大的不同在於,多程序中,同一個變數,各自有一份拷貝存在於每個程序中,互不影響,而多執行緒中, # 所有變數都由所有執行緒共享,所以,任何一個變數都可以被任何一個執行緒修改,因此,執行緒之間共享資料最大的危險在 # 於多個執行緒同時改一個變數,把內容給改亂了。 import threading import random import time blance = 0 lock = threading.Lock() # 鎖 def run_thread1(n): for i in range(10): # 先獲取鎖 chang_it(n) def run_thread2(n): for i in range(10): # 先獲取鎖 lock.acquire() try: # 放心改變值 chang_it(i) finally: lock.release() # 釋放鎖 def chang_it(n): global blance blance = blance + n time.sleep(random.random()) blance = blance - 10 blance = blance - n time.sleep(random.random()) blance = blance + 10 if __name__ == "__main__": t1 = threading.Thread(target=run_thread1,args=(4,)) t2 = threading.Thread(target=run_thread1,args=(8,)) t1.start() t2.start() t1.join() t2.join() print(blance)
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/8/21 10:52 # @Author : # threadLocal import threading localConnection = threading.local() def thread_running(connectio): localConnection.connection = connectio insertStu(connectio) def insertStu(connection): print("插入學生 呼叫連線 %s" % connection) # 在資料庫中 當前執行緒都有一個數據庫連線 當發生錯誤的時候可以回滾 if __name__ == '__main__': t1 = threading.Thread(target=thread_running, args=('連線一',)) t2 = threading.Thread(target=thread_running, args=('連線二',)) t1.start() t2.start() t1.join() t2.join() print("所有學生都已經插入")