多執行緒的概念介紹
threading模組介紹:threading模組和multiprocessing模式在使用層面,有甚大的相似性
開啟多執行緒的兩種方式
開啟程序的第一種方式:
#1.建立執行緒的開銷比建立程序的開銷小,因而建立執行緒的速度快
from multiprocessing import process
from threading import thread
import os
import time
def work():
print('<%s> is running'%os.getpid())
time.sleep(2)
print('<%s> is done'%os.getpid())
if __name__ == '__main__':
t=thread(target=work,)
# t= process(target=work,)
t.start()
print('主',os.getpid())
#開啟程序的第一種方式
開啟程序的第二種方式(用類):
from threading import thread
import time
class work(thread):
def __init__(self,name):
super().__init__()
self.name = name
def run(self):
# time.sleep(2)
print('%s say hell'%self.name)
if __name__ == '__main__':
t = work('egon')
t.start()
print('主')
#開啟執行緒的第二種方式(用類)
在乙個程序開啟多個執行緒與在乙個程序下開始多個子程序的區別:
執行緒的開啟速度大於程序的開啟速度
from multiprocessing import process
from threading import thread
import time
def work():
time.sleep(2)
print('hello')
if __name__ == '__main__':
t = thread(target=work)#如果等上幾秒,他會在開啟的過程中先列印主,如果不等會先列印hello
# t = process(target=work) #子程序會先列印主,
t.start()
print('主')
#執行緒的開啟速度大於程序的開啟速度
在同乙個程序下開多個程序和開多個執行緒的pid不同
# 2.----------
from multiprocessing import process
from threading import thread
import os
def work():
print('hello',os.getpid())
if __name__ == '__main__':
#在主程序下開啟多個執行緒,每個執行緒都跟主程序的pid一樣
t1= thread(target=work)
t2 = thread(target=work)
t1.start()
t2.start()
print('主線程pid',os.getpid())
#來多個程序,每個程序都有不同的pid
p1 = process(target=work)
p2 = process(target=work)
p1.start()
p2.start()
print('主程序pid', os.getpid())
#在同乙個程序下開多個程序和開多個執行緒的pid的不同
同一程序內的執行緒共享該程序的資料
from threading import thread
from multiprocessing import process
import os
def work():
global n
n-=1
print(n) #所以被改成99了
n = 100
if __name__ == '__main__':
# p = process(target=work)
p = thread(target=work) #當開啟的是執行緒的時候,因為同一程序內的執行緒之間共享程序內的資料
#所以列印的n為99
p.start()
p.join()
print('主',n) #毫無疑問子程序p已經將自己的全域性的n改成了0,
# 但改的僅僅是它自己的,檢視父程序的n仍然為100
#同一程序內的執行緒共享該程序的資料
執行緒和程序的區別:
開啟程序的開銷非常大,比開啟執行緒的開銷大很多.
開啟執行緒的速度非常快.要快幾十倍到上百倍.
執行緒執行緒之間可以共享資料,程序與程序之間需借助佇列等方法實現通訊.
執行緒的一些方法
from threading import thread
from threading import currentthread
from threading import enumerate
from threading import activecount
import time
import os
def task():
time.sleep(2)
print('666')
if __name__ == '__main__':
t1 = thread(target=task,name='執行緒1')
t2 = thread(target=task,name='執行緒2')
t1.start()
t2.start()
print(t1.isalive()) # 判斷執行緒是否還在活動 返回布林值
print(t1.getname()) # 獲取執行緒名稱
t1.setname('gou') # 設定執行緒名稱
print(t1.name)
print(currentthread()) # 獲取當前執行緒
print(enumerate()) # 獲取當前程序下所有執行緒,並以列表形式返回
print(activecount()) # 獲取還在活動的執行緒數
print(f"==主線程")
# 結果:
true
執行緒1gou
<_mainthread(mainthread, started 11472)>
[<_mainthread(mainthread, started 11472)>, , ]
3==主線程12980
666666
join和守護程序
互斥鎖
python併發程式設計 多執行緒 執行緒理論
一 什麼是執行緒 在傳統作業系統中,每個程序有乙個位址空間,而且預設就有乙個控制線程 執行緒顧名思義,就是一條流水線工作的過程 流水線的工作需要電源,電源就相當於cpu 而一條流水線必須屬於乙個車間,乙個車間的工作過程是乙個程序,車間負責把資源整合到一起,是乙個資源單位,而乙個車間內至少有一條流水線...
多執行緒併發程式設計
docker 可謂是開啟了容器化技術的新時代,現在無論大中小公司基本上都對容器化技術有不同程度的嘗試,或是已經進行了大量容器化的改造。伴隨著 kubernetes 和 cloud native 等技術和理念的普及,也大大增加了業務容器化需求。而這一切的推進,不可避免的技術之一便是構建容器映象。在本場...
多執行緒併發程式設計
程序是乙個執行的程式,程序裡面有多個執行緒,執行緒是程序中負責執行的程式的一執行單元,執行緒本身是依靠程式進行執行的,執行緒是程式中乙個順序控制流。執行緒分為單執行緒和多執行緒。多執行緒能更好利用cpu資源。以前單程序的,時間片切換 多執行緒實現方式 繼承thread,實現runnable。exec...