日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python的多线程threading

發布時間:2025/4/14 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)

執行結果:

2000000

3.進程與線程的區別

  • 每個程序都有至少一個進程,每個進程都有至少一個線程。
  • 線程依附于進程,不能獨立存在
  • 進程與進程直接的內存資源不能共享,只能通過特殊渠道才能通信,如Queue。但是同一進程內的所有線程是可以資源共享的。
  • 進程消耗的資源多,線程消耗資源少。

轉載于:https://www.cnblogs.com/PrettyTom/p/6592164.html

總結

以上是生活随笔為你收集整理的python的多线程threading的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。