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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python多线程(1)——介绍

發(fā)布時(shí)間:2025/7/14 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python多线程(1)——介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  Python對多線程提供了很好的支持,Python中多線程相關(guān)的模塊包括:thread,threading,Queue。可以方便地支持創(chuàng)建線程、互斥鎖、信號量、同步等特性。

  1.?thread:多線程的底層支持模塊,除了其中提供的 Lock 原語外,一般不建議使用。

  2.?threading:基于 thread 模塊,將一些線程的操作對象化,該模塊提供下列類:

      • Thread,線程類
      • Timer,與Thread類似,但要等待一段時(shí)間后才開始運(yùn)行
      • Lock,鎖原語,和 thread 模塊提供的 Lock 相同
      • RLock,可重入鎖。使單線程可以再次獲得已經(jīng)獲得的鎖
      • Condition,條件變量,能讓一個(gè)線程停下來,等待其他線程滿足某個(gè)“條件”
      • Event,通用的條件變量。多個(gè)線程可以等待某個(gè)事件發(fā)生,在事件發(fā)生后,所有的線程都被激活
      •   Semaphore,為等待鎖的線程提供一個(gè)類似“等候室”的結(jié)構(gòu)
      3. Queue:實(shí)現(xiàn)了多生產(chǎn)者(Producer)、多消費(fèi)者(Consumer)的隊(duì)列,支持鎖原語,能夠在多個(gè)線程之間提供很好的同步支持。提供的類:
      •   

        Queue隊(duì)列

      • LifoQueue后入先出(LIFO)隊(duì)列

      • PriorityQueue 優(yōu)先隊(duì)列

?

Python線程系列包括以下部分:

  第1篇——Thread對象

  第2篇——常用的線程同步機(jī)制

  第3篇——Queue模塊與線程編程

  本文將介紹Python線程中的主角,threading.Thread 對象。

?

Thread in Python

1.1 Thread對象的創(chuàng)建

  通過實(shí)例化Thread類型獲得一個(gè)Thread對象:

threading.Thread(name=None, target=None, args=(), kwargs={})

  參數(shù)的含義:

  •   name:新線程的名稱,如果沒有指定,python會為其生成一個(gè)隨機(jī)的唯一名稱;
  •   target:新線程中將要執(zhí)行的函數(shù);t.run() 會調(diào)用 target(*args, **kwargs)
  •   args和kwargs:這是傳遞給線程中運(yùn)行的主函數(shù) target 的參數(shù),當(dāng)線程開始運(yùn)行時(shí),將會以這些參數(shù)調(diào)用執(zhí)行主函數(shù) target()。

?

1.2 Thread對象的方法

t.getName()

  返回線程當(dāng)前的名字。

  

t.setName(name)

  設(shè)置線程的名字,線程的名稱并不要求唯一。

  

t.isAlive()

  判斷這個(gè)線程是否還在運(yùn)行中(active)——已經(jīng)調(diào)用了start() 而 run() 還沒有執(zhí)行結(jié)束。

?

t.isDaemon()

  判斷線程是不是一個(gè)daemon線程,初始狀態(tài)下,線程 t1 只有在創(chuàng)建自己的線程 t0 是daemon時(shí),自己才是daemon的。

?

t.setDaemon(daemonic)

  把線程的daemon標(biāo)志設(shè)為daemonic(真或假)

  daemon 線程是指,即使這個(gè)線程 t 的狀態(tài)是 active,Python也可以終止 t(可能是通過終止 t 所在的進(jìn)程);非daemon線程沒有終止前,Python會一直保持運(yùn)行直到其終止。

  setDaemon()需要在start()之前調(diào)用。

?

t.join(timeout=None)

  這個(gè)函數(shù)需要注意,比如在一個(gè)線程 t1 的執(zhí)行流程中調(diào)用 t2.join(),則?t1 阻塞直到 t2 線程執(zhí)行結(jié)束,如果指定 timeout,則 t1 最多阻塞timeout秒,否則 t1 將一直等下去。

  join()只能在start()之后調(diào)用;

?

t.run()

  線程通過 run() 調(diào)用傳入的主函數(shù) target,不要直接調(diào)用run(),而是調(diào)用start()函數(shù),start()函數(shù)會調(diào)用run()。

?

t.start()

  開始線程執(zhí)行

  

Python線程運(yùn)行的流程

  1. 創(chuàng)建一個(gè)線程 t= threading.Thread(),此時(shí)新創(chuàng)建的線程并不會立即執(zhí)行;

  2. 如果想要將 t 設(shè)置為守護(hù)線程,在調(diào)用 t.start() 之前調(diào)用 t.setDaemon(True);否則忽略本步;

  3.?調(diào)用 t.start(),此時(shí)線程開始執(zhí)行,狀態(tài)更新為 active。更具體的,start() 會進(jìn)一步調(diào)用 run() 函數(shù),run() 函數(shù)再去調(diào)用創(chuàng)建線程對象時(shí)傳入的主函數(shù) target,從而讓線程有了執(zhí)行的具體內(nèi)容;

  4. 當(dāng)線程中的主函數(shù)執(zhí)行完成或遇到未處理的異常時(shí),線程終止執(zhí)行;daemon線程也可能因?yàn)樗谶M(jìn)程終止而被Python終止。

總結(jié)

以上是生活随笔為你收集整理的Python多线程(1)——介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。