日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python之线程,不得不了解的硬知识!

發布時間:2025/3/15 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python之线程,不得不了解的硬知识! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、什么是線程

  • 進程:資源單位

  • 線程:執行單位

  • 進程:資源單位(起一個進程僅僅只是在內存空間中開辟一塊獨立的空間)

  • 線程:執行單位(真正被cpu執行的其實是進程里面的線程,線程指的就是代碼的執行過程,執行代碼中所需要使用到的資源都找所在的進程索要)

進程和線程都是虛擬單位,只是為了我們更加方便的描述問題

二、為什么要有線程

  • 開設進程
    1.申請內存空間 耗資源
    2.“拷貝代碼” 耗資源
  • 開線程
    一個進程內可以開設多個線程,在用一個進程內開設多個線程無需再次申請內存空間操作
  • 總結:
    開設線程的開銷要遠遠的小于進程的開銷
    同一個進程下的多個線程數據是共享的!!!

三、怎么開啟線程

  • 開進程和開線程的步驟基本都是一樣的 只是導入的模塊不一樣而已
  • 開進程代碼必須寫在main下面而開線程則無需這么做

3.1、方式一

from threading import Thread import timedef task(name):print(F'{name} is running')time.sleep(1)print(F'{name} is stopping')# 開線程的代碼不需要寫在main中 # 但是習慣性的將啟動命令寫在main下面t = Thread(target=task,args=('tzh',)) t.start() print('我是主線程')

3.2、方式二

from threading import Thread import timeclass MyThead(Thread):def __init__(self,name):#重寫別人的方法super().__init__()self.name = namedef run(self):print(F'{self.name} is running')time.sleep(1)print(F'{self.name} is stoppings')print('tzh666') if __name__ == '__main__':t = MyThead('tzh')t.start()

四、線程對象的join方法

from threading import Thread import timedef task(name):print('%s is running'%name)time.sleep(3)print('%s is over'%name)if __name__ == '__main__':t = Thread(target=task,args=('egon',))t.start()t.join() # 主線程等待子線程運行結束再執行print('主')

五、同一個進程下的多個線程數據是共享的

from threading import Thread import timemoney = 100def task():global moneymoney = 666print(money)if __name__ == '__main__':t = Thread(target=task)t.start()t.join()print(money)

六、線程對象屬性及其他方法

from threading import Thread, active_count, current_thread import os, timedef task():print(F'子進程號是:{os.getpid()}')print(F'子線程名字是:{current_thread().name}')time.sleep(2)if __name__ == '__main__':t = Thread(target=task)t.start()#打印出來是一樣的,因為他們在同一個下進程中print(F'主進程號是:{os.getpid()}')print(F'主線程名字是:{current_thread().name}')print(F'活躍的線程數:{active_count()}')

七、守護線程

  • 主線程運行結束之后不會立刻結束 會等待所有其他非守護線程結束才會結束
  • 因為主線程的結束意味著所在的進程的結束。如果大家對Python感興趣的話,可以加一下我們的學習交流摳摳群哦:649825285,免費領取一套學習資料和視頻課程喲~
from threading import Thread import timedef task(name):print('%s is running'%name)time.sleep(1)print('%s is over'%name)if __name__ == '__main__':t = Thread(target=task, args=('tzh', ))t.daemon = Truet.start()print('主') from threading import Thread import timedef foo():print(123)time.sleep(1)print('end123')def func():print(456)time.sleep(3)print('end456')if __name__ == '__main__':t1 = Thread(target=foo)t2 = Thread(target=func)t1.daemon = Truet1.start()t2.start()print('主.......')--輸出-- 123 456 主....... end123 end456

八、線程互斥鎖

from threading import Thread, Lock import timemoney = 100 mutex = Lock()def task():global money#上鎖mutex.acquire()tmp = moneytime.sleep(0.1)money = tmp - 1#用完之后釋放mutex.release()if __name__ == '__main__':t_list = []for i in range(100):t = Thread(target=task)t.start()t_list.append(t)for t in t_list:t.join()print(money)

總結

以上是生活随笔為你收集整理的python之线程,不得不了解的硬知识!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。