python的多线程threading
生活随笔
收集整理的這篇文章主要介紹了
python的多线程threading
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
多線程threading
1.Thread創建線程:
上代碼:
#!/usr/bin/env python3import threading import timedef A():t_name = threading.current_thread().name #獲取線程名稱for i in range(5):print(i)time.sleep(1)print(t_name)t1 = threading.Thread(target = A) #創建線程對象 t1.start() #啟動線程 print(threading.current_thread().name)輸出結果:
0 MainThread 1 2 3 4 Thread-1- 一個進程最少且必須有一個線程,是主線程:MainThread,創建出來的是子線程,用Thread-1,Thread-2···命名
- 主線程會等待子線程執行完畢之后才會結束
2.互斥鎖(線程鎖、全局變量鎖):
- 當多個線程同時對一個全局變量進行修改時會出現爭搶,導致可能搶到的值是相同的,造成一些線程做了無用功。
上代碼:
#!/usr/bin/env python3import threading import timenum = 0def A():global numfor i in range(1000000):num += 1def B():global numfor i in range(1000000):num += 1t1 = threading.Thread(target = A) t1.start() t2 = threading.Thread(target = B) t2.start()t1.join() #等待線程執行完成后在往下執行 t2.join() print(num)執行結果:
1924932- 按理說結果應該是2000000才對,可是由于線程之間的對全局變量的爭搶,導致了值得不穩定。所以要對全局變量每次操作時進行加鎖,避免其混亂。
改進版:
#!/usr/bin/env python3import threading import timenum = 0def A():global numfor i in range(1000000):lock.acquire() #加鎖num += 1lock.release() #解鎖def B():global numfor i in range(1000000):lock.acquire() #加鎖num += 1lock.release() #解鎖lock = threading.Lock() #創建鎖 t1 = threading.Thread(target = A) t1.start() t2 = threading.Thread(target = B) t2.start()t1.join() #等待線程執行完成后在往下執行 t2.join() print(num)執行結果:
20000003.進程與線程的區別
- 每個程序都有至少一個進程,每個進程都有至少一個線程。
- 線程依附于進程,不能獨立存在
- 進程與進程直接的內存資源不能共享,只能通過特殊渠道才能通信,如Queue。但是同一進程內的所有線程是可以資源共享的。
- 進程消耗的資源多,線程消耗資源少。
轉載于:https://www.cnblogs.com/PrettyTom/p/6592164.html
總結
以上是生活随笔為你收集整理的python的多线程threading的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos7.3挂在移动硬盘(亲测)
- 下一篇: Shell基础01