91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中多線程是什么

發布時間:2020-10-24 14:02:39 來源:億速云 閱讀:263 作者:小新 欄目:編程語言

小編給大家分享一下python中多線程是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

大家可以根據以下Python多線程的實例應用和結合現有認知更深刻了解python多線程。

在Python 3中已經內置了_thread和threading兩個模塊來實現多線程。相較于_thread,threading提供的方法更多而且更常用,因此接下來我們將舉例講解threading模塊的用法,首先來看下面這段代碼:

import threading
 import time
  
 def say_after(what, delay):
  print (what)
  time.sleep(delay)
  print (what)
  
 t = threading.Thread(target = say_after, args = ('hello',3))
 t.start()

1、這里我們導入了threading這個Python內置模塊來實現多線程。之后定義了一個say_after(what, delay)函數,該函數包含what和delay兩個參數,分別用來表示打印的內容,以及time.sleep()休眠的時間。

2、隨后我們使用threading的Thread()函數為say_after(what, delay)函數創建了一個線程并將它賦值給變量t,注意Thread()里的target參數對應的是函數名稱(即這里的say_after),args對應的是該say_after函數里的參數,這里等同于“what = ‘hello’”,“delay = 3”。

3、最后我們調用threading中的start()來啟動我們剛剛創建的線程。

運行代碼效果:

python中多線程是什么

在打印出第一個hello后,程序因為time.sleep(3)休眠了三秒,三秒之后隨即打印出了第二個hello。因為這時我們只運行了say_after(what, delay)這一個函數,并且只運行了一次,因此即使我們現在啟用了多線程,我們也感受不了它和單線程有什么區別。接下來我們將該代碼修改如下:

#coding=utf-8
 import threading
 import time
  
 def say_after(what, delay):
  print (what)
  time.sleep(delay)
  print (what)
  
 t = threading.Thread(target = say_after, args = ('hello',3))
  
 print (f"程序于 {time.strftime('%X')} 開始執行")
 t.start()
 print (f"程序于 {time.strftime('%X')} 執行結束")

這一次我們調用time.strftime()來嘗試記錄程序執行前和執行后的時間,看看有什么“意想不到”的結果。

運行代碼效果:

python中多線程是什么

這里除了threading.Thread()為say_after()函數創建的用戶線程外,“print (f"程序于 {time.strftime('%X')} 開始執行")”和“print (f"程序于 {time.strftime('%X')} 執行結束")”兩個print()函數也共同占用了公用的內核線程。也就是說該腳本現在實際上是調用了兩個線程:一個用戶線程,一個內核線程,也就構成了一個多線程的環境。因為分屬不同的線程,say_after()函數和函數之外的兩個print語句是同時運行的,互不干涉。

如果想要正確捕捉say_after(what, delay)函數開始和結束時的時間,我們需要額外使用threading模塊的join()方法,來看下面的代碼:

#coding=utf-8
 import threading
 import time
  
 def say_after(what, delay):
  print (what)
  time.sleep(delay)
  print (what)
  
 t = threading.Thread(target = say_after, args = ('hello',3))
  
 print (f"程序于 {time.strftime('%X')} 開始執行")
 t.start()
 t.join()
 print (f"程序于 {time.strftime('%X')} 執行結束")

這里我們只修改了代碼的一處地方,即在t.start()下面添加了一個t.join(),join()方法的作用是強制阻塞調用它的線程,直到該線程運行完畢或者終止為止(類似于單線程同步)。因為這里調用join()方法的變量t正是我們用threading.Thread()為say_after(what, delay)創建的用戶線程,因此使用內核線程的“print (f"程序于 {time.strftime('%X')} 執行結束")”必須等待該用戶線程執行完畢過后才能繼續執行,因此腳本在執行時的效果會讓你覺得整體還是以“單線程同步”的方式運行的。

運行代碼效果:

python中多線程是什么

最后我們再舉一例,來看看創建多個用戶線程并運行,代碼如下:

#coding=utf-8
 import threading
 import time
  
 def say_after(what, delay):
  print (what)
  time.sleep(delay)
  print (what)
  
 print (f"程序于 {time.strftime('%X')} 開始執行\n")
 threads = []
  
 for i in range(1,6):
  t = threading.Thread(target=say_after, name="線程" + str(i), args=('hello',3))
  print(t.name + '開始執行。')
  t.start()
   threads.append(t)
  
 for i in threads:
  i.join()
 print (f"\n程序于 {time.strftime('%X')} 執行結束")

這里我們使用for循環配合range(1,6)創建了5個線程,并且將它們以多線程的形式執行,也就是把say_after(what, delay)函數以多線程的形式執行了5次。每個線程作為元素加入進了threads這個空列表,然后我們再次使用for語句來遍歷現在已經有了5個線程的threads列表,對其中的每個線程都調用的join()方法,確保直到它們都執行結束后,我們才執行內核線程下的“print (f"程序于 {time.strftime('%X')} 執行結束")”。

運行代碼效果:

python中多線程是什么

可以看到這里我們成功的使用了多線程將程序執行,如果以單線程來執行5次say_after(what,delay)函數的話,那么需要花費3x5=15秒才能跑完整個腳本,而在多線程的形式下,整個程序只花費了3秒就運行完畢。

以上是python中多線程是什么的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

额尔古纳市| 板桥市| 旌德县| 承德市| 吉林省| 元氏县| 正安县| 高安市| 裕民县| 广州市| 新晃| 卢湾区| 富源县| 南涧| 土默特右旗| 仁怀市| 峨山| 新巴尔虎左旗| 浪卡子县| 囊谦县| 玉树县| 莫力| 图片| 玛曲县| 甘洛县| 巴南区| 永兴县| 娄底市| 高平市| 万山特区| 银川市| 德庆县| 庄河市| 屯门区| 灵山县| 东山县| 嘉峪关市| 沂南县| 曲麻莱县| 仁化县| 丰台区|