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

溫馨提示×

溫馨提示×

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

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

Python多線程的示例分析

發布時間:2021-11-01 17:50:50 來源:億速云 閱讀:132 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關Python多線程的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

線程相對進程來說是“輕量級”的,操作系統用較少的資源創建和管理線程。程序中的線程在相同的內存空間中執行,并共享許多相同的資源。

在Python多線程中如何創建一個線程對象

如果你要創建一個線程對象,很簡單,只要你的類繼承threading.Thread,然后在__init__里首先調用threading.Thread的__init__方法即可

import threading  class mythread(threading.Thread):  def __init__(self, threadname):  threading.Thread.__init__(self, name = threadname)  …

這才僅僅是個空線程,我可不是要他拉空車的,他可得給我干點實在活。很簡單,重寫類的run()方法即可,把你要在線程執行時做的事情都放到里面

import threading  import time  class mythread(threading.Thread):  def __init__(…):  ….  def run(self):  for i in range(10):  print self.getName, i  time.sleep(1)

以上代碼我們讓這個線程在執行之后每隔1秒輸出一次信息到屏幕,10次后結束

getName()是threading.Thread類的一個方法,用來獲得這個線程對象的name。還有一個方法setName()當然就是來設置這個線程對象的name的了。

如果要創建一個線程,首先就要先創建一個線程對象

mythreadmythread1 = mythread(’mythread 1′)

一個線程對象被創建后,他就處于“born”(誕生狀態)

如何讓這個Python多線程對象開始運行呢?只要調用線程對象的start()方法即可

mythread1.start()

現在線程就處于“ready”狀態或者也稱為“runnable”狀態。

奇怪嗎?不是已經start了嗎?為什么不稱為“running”狀態呢?其實是有原因的。因為我們的計算機一般是不具有真正并行處理能力的。我們所謂的Python多線程只是把時間分成片段,然后隔一個時間段就讓一個線程執行一下,然后進入“sleeping ”狀態,然后喚醒另一個在“sleeping”的線程,如此循環runnable->sleeping->runnable… ,只是因為計算機執行速度很快,而時間片段間隔很小,我們感受不到,以為是同時進行的。所以說一個線程在start了之后只是處在了可以運行的狀態,他什么時候運行還是由系統來進行調度的。

那一個線程什么時候會“dead”呢?一般來說當線程對象的run方法執行結束或者在執行中拋出異常的話,那么這個線程就會結束了。系統會自動對“dead”狀態線程進行清理。

如果一個線程t1在執行的過程中需要等待另一個線程t2執行結束后才能運行的話那就可以在t1在調用t2的join()方法

….  def t1(…):  …  t2.join()  …

這樣t1在執行到t2.join()語句后就會等待t2結束后才會繼續運行。

但是假如t1是個死循環的話那么等待就沒有意義了,那怎么辦呢?可以在調用t2的join()方法的時候給一個浮點數做超時參數,這樣這個線程就不會等到花兒也謝了了。我等你10s,你不回來我還不允許我改嫁啊?

def t1(…):  …  t2.join(10)  …

如果一個進程的主線程運行完畢而子線程還在執行的話,那么進程就不會退出,直到所有子線程結束為止,如何讓主線程結束的時候其他子線程也乖乖的跟老大撤退呢?那就要把那些不聽話的人設置為聽話的小弟,使用線程對象的setDaemon()方法,參數為bool型。True的話就代表你要聽話,我老大(主線程)扯呼,你也要跟著撤,不能拖后腿。如果是False的話就不用那么聽話了,老大允許你們將在外軍命有所不受的。需要注意的是setDaemon()方法必須在線程對象沒有調用start()方法之前調用,否則沒效果。

t1 = mythread(’t1′)  print t1.getName(),t1.isDaemon()  t1.setDaemon(True)  print t1.getName(),t1.isDaemon()  t1.start()  print ‘main thread exit’

當執行到 print ‘main thread exit’ 后,主線程就退出了,當然t1這個線程也跟著結束了。但是如果不使用t1線程對象的setDaemon()方法的話,即便主線程結束了,還要等待t1線程自己結束才能退出進程。isDaemon()是用來獲得一個線程對象的Daemonflag狀態的。

如何來獲得與Python多線程有關的信息呢?

獲得當前正在運行的線程的引用

running = threading.currentThread()

獲得當前所有活動對象(即run方法開始但是未終止的任何線程)的一個列表

threadlist = threading.enumerate()

獲得這個列表的長度

threadcount = threading.activeCount()

查看一個線程對象的狀態調用這個線程對象的isAlive()方法,返回1代表處于“runnable”狀態且沒有“dead”

threadflag = threading.isAlive()

關于“Python多線程的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

龙山县| 元谋县| 兴宁市| 宝兴县| 海宁市| 通化县| 馆陶县| 繁昌县| 岢岚县| 南召县| 华宁县| 阿拉善右旗| 东丰县| 峨眉山市| 定结县| 双城市| 永胜县| 鲁甸县| 富源县| 双柏县| 白银市| 满洲里市| 兰州市| 滦南县| 深水埗区| 汽车| 新蔡县| 两当县| 吴川市| 微山县| 阳春市| 德化县| 奇台县| 宿迁市| 改则县| 磴口县| 凭祥市| 秀山| 日照市| 焦作市| 信丰县|