成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python多線程實際編程方式淺析

開發 后端
如和利用Python多線程來創建一個線程對象呢?我們今天就為大家詳細介紹一下這方面的相關知識,希望可以給大家帶來些幫助。

在編程語言中,多線程的應用是一個比較重要的應用技術。那么,Python編程語中的多線程應用同樣也是非常重要的。我們今天就會為大家詳細介紹一下有關Python多線程的相關應用技巧。#t#

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

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

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

 

  1. import threading  
  2. class mythread(threading.Thread):  
  3. def __init__(self, threadname):  
  4. threading.Thread.__init__(self, name = threadname)  
  5. … 

 

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

 

  1. import threading  
  2. import time  
  3. class mythread(threading.Thread):  
  4. def __init__(…):  
  5. ….  
  6. def run(self):  
  7. for i in range(10):  
  8. print self.getName, i  
  9. time.sleep(1) 

 

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

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

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

 

  1. mythreadmythread1 = mythread(’mythread 1′) 

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

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

 

  1. mythread1.start() 

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

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

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

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

 

  1. ….  
  2. def t1(…):  
  3. …  
  4. t2.join()  
  5. … 

 

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

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

 

  1. def t1(…):  
  2. …  
  3. t2.join(10)  
  4. … 

 

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

 

  1. t1 = mythread(’t1′)  
  2. print t1.getName(),t1.isDaemon()  
  3. t1.setDaemon(True)  
  4. print t1.getName(),t1.isDaemon()  
  5. t1.start()  
  6. print ‘main thread exit’ 

 

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

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

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

 

  1. running = threading.currentThread() 

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

 

  1. threadlist = threading.enumerate() 

獲得這個列表的長度

 

  1. threadcount = threading.activeCount() 

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

  1. threadflag = threading.isAlive() 

以上就是我們為大家詳細介紹的有關Python多線程的相關內容。

責任編輯:曹凱 來源: 博客園
相關推薦

2010-02-01 17:25:09

Python多線程

2011-07-01 17:50:13

Python 多線程

2021-08-12 14:33:20

Python多線程編程

2009-08-12 18:04:44

編寫C#多線程

2013-07-16 10:12:14

iOS多線程多線程概念多線程入門

2023-06-13 13:39:00

多線程異步編程

2009-03-12 10:52:43

Java線程多線程

2023-10-18 15:19:56

2024-10-16 09:34:50

2011-04-08 10:36:38

MFC多線程

2009-07-03 17:18:34

Servlet多線程

2023-04-02 17:53:10

多線程編程自測

2018-04-11 10:51:25

多線程進程主線程

2023-06-07 13:49:00

多線程編程C#

2023-06-05 07:56:10

線程分配處理器

2023-06-06 08:17:52

多線程編程Thread類

2009-07-17 17:29:13

多任務多線程

2011-08-29 16:16:22

Lua函數多線程

2011-06-24 11:03:31

Qt 多線程 線程

2011-06-24 11:12:39

Qt 多線程 線程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美视频区 | 欧美成人a| av一级久久| 精品久久久久久久人人人人传媒 | 国产性色视频 | 亚洲精品68久久久一区 | 亚洲成av | 91免费视频 | 欧美日韩一区不卡 | 精品少妇一区二区三区在线播放 | 91精品国产91久久久久游泳池 | av一级久久 | 久久高清国产 | 91精品久久久久久久久中文字幕 | 日韩精品中文字幕在线 | 成人二区| 91aiai| 91日b| 欧美极品在线视频 | 在线免费看黄 | 国产成人精品999在线观看 | 国产精品美女久久久av超清 | 亚洲午夜精品在线观看 | 精品免费在线 | 成人免费在线观看 | 亚洲一区二区三 | 日本午夜免费福利视频 | 国产视频2021 | 日本亚洲一区二区 | 精品成人佐山爱一区二区 | 一级做a爰片性色毛片16美国 | 日韩视频一区 | 成年人视频免费在线观看 | 中文字幕在线播放不卡 | 欧美一区精品 | 精品国产一区二区三区av片 | 在线国产一区二区 | 精品在线99 | 欧美中文字幕一区二区三区亚洲 | 一级做a毛片 | www国产亚洲精品久久网站 |