亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python threading多線(xiàn)程編程實(shí)例

 更新時(shí)間:2014年09月18日 09:53:54   投稿:junjie  
這篇文章主要介紹了Python threading多線(xiàn)程編程實(shí)例,本文講解了使用函數(shù)和線(xiàn)程類(lèi)實(shí)現(xiàn)多線(xiàn)程編程的例子,需要的朋友可以參考下

Python 的多線(xiàn)程有兩種實(shí)現(xiàn)方法:

函數(shù),線(xiàn)程類(lèi)

1.函數(shù)

調(diào)用 thread 模塊中的 start_new_thread() 函數(shù)來(lái)創(chuàng)建線(xiàn)程,以線(xiàn)程函數(shù)的形式告訴線(xiàn)程該做什么

復(fù)制代碼 代碼如下:

# -*- coding: utf-8 -*-
import thread
def f(name):
  #定義線(xiàn)程函數(shù)
  print "this is " + name
 
if __name__ == '__main__':
  thread.start_new_thread(f, ("thread1",))
  #用start_new_thread()調(diào)用線(xiàn)程函數(shù)和其他參數(shù)
  while 1:
    pass

不過(guò)這種方法暫時(shí)沒(méi)能找到其他輔助方法,連主線(xiàn)程等待都要用 while 1 這種方法解決。

2.線(xiàn)程類(lèi)

調(diào)用 threading 模塊,創(chuàng)建 threading.Thread 的子類(lèi)來(lái)得到自定義線(xiàn)程類(lèi)。

復(fù)制代碼 代碼如下:

# -*- coding: utf-8 -*-
import threading
class Th(threading.Thread):
  def __init__(self, name):
    threading.Thread.__init__(self)
    self.t_name = name
    #調(diào)用父類(lèi)構(gòu)造函數(shù)
 
  def run(self):
    #重寫(xiě)run()函數(shù),線(xiàn)程默認(rèn)從此函數(shù)開(kāi)始執(zhí)行
    print "This is " + self.t_name
 
if __name__ == '__main__':
  thread1 = Th("Thread_1")
  thread1.start()
  #start()函數(shù)啟動(dòng)線(xiàn)程,自動(dòng)執(zhí)行run()函數(shù)

threading.Thread 類(lèi)的可繼承函數(shù):
getName() 獲得線(xiàn)程對(duì)象名稱(chēng)
setName() 設(shè)置線(xiàn)程對(duì)象名稱(chēng)
join() 等待調(diào)用的線(xiàn)程結(jié)束后再運(yùn)行之后的命令
setDaemon(bool) 阻塞模式, True: 父線(xiàn)程不等待子線(xiàn)程結(jié)束, False 等待,默認(rèn)為 False
isDaemon() 判斷子線(xiàn)程是否和父線(xiàn)程一起結(jié)束,即 setDaemon() 設(shè)置的值
isAlive() 判斷線(xiàn)程是否在運(yùn)行

實(shí)例

復(fù)制代碼 代碼如下:

import threading
import time
class Th(threading.Thread):
  def __init__(self, thread_name):
    threading.Thread.__init__(self)
    self.setName(thread_name)
 
  def run(self):
    print "This is thread " + self.getName()
    for i in range(5):
      time.sleep(1)
      print str(i)
    print self.getName() + "is over"

join() 阻塞等待

復(fù)制代碼 代碼如下:

if __name__ == '__main__':
    thread1 = Th("T1 ")
    thread1.start()
    #thread1.join()
    print "main thread is over"

不帶 thread1.join() ,得到如下結(jié)果:

復(fù)制代碼 代碼如下:

This is thread T1
main thread is over
0
1
2
T1 is over

不等待 thread1 完成,執(zhí)行之后語(yǔ)句。
加了 thread1.join() ,得到如下結(jié)果:
復(fù)制代碼 代碼如下:

This is thread T1
0
1
2
T1 is over
main thread is over

阻塞等待 thread1 結(jié)束,才執(zhí)行下面語(yǔ)句

主線(xiàn)程等待

復(fù)制代碼 代碼如下:

if __name__ == '__main__':
  thread1 = Th("T1 ")
  thread1.setDaemon(True)
  #要在線(xiàn)程執(zhí)行之前就設(shè)置這個(gè)量
  thread1.start()
  print "main thread is over"

報(bào)錯(cuò): Exception in thread T1 (most likely raised during interpreter shutdown):
也就是主線(xiàn)程不等待子線(xiàn)程就結(jié)束了。

多個(gè)子線(xiàn)程

復(fù)制代碼 代碼如下:

if __name__ == '__main__':
    for i in range(3):
        t = Th(str(i))
        t.start()
    print "main thread is over"

這里的 t 可同時(shí)處理多個(gè)線(xiàn)程,即 t 為線(xiàn)程句柄,重新賦值不影響線(xiàn)程。

這里奇怪的是,運(yùn)行 t.run() 時(shí),不會(huì)再執(zhí)行其他線(xiàn)程。雖不明,還是用 start() 吧。暫且理解為 start() 是非阻塞并行的,而 run 是阻塞的。

線(xiàn)程鎖

threading 提供線(xiàn)程鎖,可以實(shí)現(xiàn)線(xiàn)程同步。

復(fù)制代碼 代碼如下:

import threading
import time
class Th(threading.Thread):
  def __init__(self, thread_name):
    threading.Thread.__init__(self)
    self.setName(thread_name)
 
  def run(self):
    threadLock.acquire()
    #獲得鎖之后再運(yùn)行
    print "This is thread " + self.getName()
    for i in range(3):
      time.sleep(1)
      print str(i)
    print self.getName() + " is over"
    threadLock.release()
    #釋放鎖
if __name__ == '__main__':
  threadLock = threading.Lock()
  #設(shè)置全局鎖
  thread1 = Th('Thread_1')
  thread2 = Th('Thread_2')
  thread1.start()
  thread2.start()

得到結(jié)果:

復(fù)制代碼 代碼如下:

This is thread Thread_1
0
1
2
Thread_1 is over
This is thread Thread_2
0
1
2
Thread_2 is over

相關(guān)文章

  • python爬蟲(chóng)實(shí)戰(zhàn)之爬取京東商城實(shí)例教程

    python爬蟲(chóng)實(shí)戰(zhàn)之爬取京東商城實(shí)例教程

    這篇文章主要介紹了python爬取京東商城的相關(guān)資料,文中通過(guò)爬取一個(gè)實(shí)例頁(yè)面進(jìn)行了講解,通過(guò)示例代碼和圖文介紹的非常詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-04-04
  • python定時(shí)關(guān)機(jī)小腳本

    python定時(shí)關(guān)機(jī)小腳本

    這篇文章主要為大家詳細(xì)介紹了python定時(shí)關(guān)機(jī)小腳本,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 基于Python利用Pygame實(shí)現(xiàn)翻轉(zhuǎn)圖像

    基于Python利用Pygame實(shí)現(xiàn)翻轉(zhuǎn)圖像

    這篇文章主要介紹了基于Python利用Pygame實(shí)現(xiàn)翻轉(zhuǎn)圖像,我們將了解如何使用Pygame翻轉(zhuǎn)圖像,要翻轉(zhuǎn)圖像,我們需要使用pygame.transform.flip(Surface,?xbool,?ybool)?方法,該方法被調(diào)用來(lái)根據(jù)我們的需要在垂直方向或水平方向翻轉(zhuǎn)圖像,下面來(lái)看看具體的實(shí)現(xiàn)過(guò)程吧
    2022-02-02
  • 通過(guò)gradio和攝像頭獲取照片和視頻實(shí)現(xiàn)過(guò)程

    通過(guò)gradio和攝像頭獲取照片和視頻實(shí)現(xiàn)過(guò)程

    這篇文章主要為大家介紹了gradio和攝像頭獲取照片和視頻實(shí)現(xiàn)過(guò)程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Tensorflow加載Vgg預(yù)訓(xùn)練模型操作

    Tensorflow加載Vgg預(yù)訓(xùn)練模型操作

    這篇文章主要介紹了Tensorflow加載Vgg預(yù)訓(xùn)練模型操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • Python2和Python3中urllib庫(kù)中urlencode的使用注意事項(xiàng)

    Python2和Python3中urllib庫(kù)中urlencode的使用注意事項(xiàng)

    這篇文章主要介紹了Python2和Python3中urllib庫(kù)中urlencode的使用注意事項(xiàng),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • 18個(gè)Python入門(mén)經(jīng)典必背的程序分享

    18個(gè)Python入門(mén)經(jīng)典必背的程序分享

    這篇文章主要為大家介紹了Python入門(mén)經(jīng)典必背的18個(gè)程序。注意:這是初學(xué)者要牢記的 18 個(gè)代碼,入門(mén)之后就簡(jiǎn)單了,快跟隨小編一起來(lái)學(xué)習(xí)一下吧
    2023-02-02
  • 在windows下使用python進(jìn)行串口通訊的方法

    在windows下使用python進(jìn)行串口通訊的方法

    今天小編就為大家分享一篇在windows下使用python進(jìn)行串口通訊的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Pytorch:Conv2d卷積前后尺寸詳解

    Pytorch:Conv2d卷積前后尺寸詳解

    這篇文章主要介紹了Pytorch:Conv2d卷積前后尺寸,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 解決Python的str強(qiáng)轉(zhuǎn)int時(shí)遇到的問(wèn)題

    解決Python的str強(qiáng)轉(zhuǎn)int時(shí)遇到的問(wèn)題

    下面小編就為大家分享一篇解決Python的str強(qiáng)轉(zhuǎn)int時(shí)遇到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04

最新評(píng)論