多執行緒的應用場景 不適用cpu操作密集型任務, 適合io操作密集型任務
同一程序中的資料是互通的,因為python多執行緒是假多執行緒,我們要用到多核就需要開多個程序來實現,但是壞處是資料不能互通
執行緒:是作業系統最小的排程單位,是一串指令的集合
程序:eg:qq要以乙個整體的形式暴露給作業系統管理,裡面包含對各種資源的呼叫,記憶體對各種資源管理的集合叫做程序
程序操作cpu必須先建立乙個執行緒,只有執行緒才能操作cpu
所一在同一程序中的執行緒是共享同一片記憶體空間的,但是兩個執行緒不能在同一塊空間裡運作
主線程和子執行緒執行是並行的
importthreading
import
time
defrun(name):
print('
in the %s
' %name)
time.sleep(2)
首先我們設定乙個函式我們開啟兩個執行緒
t2 = threading.thread(target=run,args=('t2',))t1 = threading.thread(target=run,args=('t1'
,))t1.start()
t2.start()
你就會看到 並行的結果了,可是出現了乙個問題 我們向要在程序結束後使用其結果該怎麼辦呢?
我們可以使用join哦
star_time =time.time()r_obj =
for i in range(50):
t = threading.thread(target=run, args=('
t %s
' %i, ))
t.setdaemon(true)
#把子執行緒設定成守護執行緒
t.start()
for i in
r_obj:
i.join()
可以看到我們把每乙個程序丟進了陣列,來是他們結束那麼後面我們就可以達到效果了
順便提一下我們還有乙個使用類的方法來開多程序哦
#class mythraed(threading.thread):
#def __init__(self,name):
#super(mythraed, self).__init__()
#self.name = name##
def run(self):
#print('run the %s',self.name)
#time.sleep(2)
#t1 = mythraed('t1')
#t2 = mythraed('t2')
#t1.start()
#t2.start()
注意 python的執行緒是呼叫作業系統的源生執行緒,python在一時間內只能在一核中執行
如果你是2.x記得加鎖哦不然會出現差錯
local = threading.local() #加鎖首先生成例項
defrun(name):
global
num local.acquire() #上鎖
num += 1local.release() #解鎖
print('
in the %s
' % name)
2.程序(multiprocessing)
同理程序也和執行緒一樣的開啟方式,也是start一下 也可以join
for i in range(10):p = multiprocessing.process(target=run, args=('
liu%s
' %i,))
p.start()
需要注意的是,每個程序都有乙個父程序衍生出來,所以 檢視程序的pid可以用os來檢視,
如果你用pycharm寫了乙個程式那麼這個程式的父親程序pid就是pychram在電腦中的pid
檢視父親程序用
os.getppid()
檢視當前程序的pid用
os.getpid()
python之執行緒與多程序
概念 如果把電腦cpu比作工廠,與常見工廠不同,在這個工廠中,單位時間下 只執行乙個車間開工,程序就像乙個車間而,車間內的工人相互合作,共同完成車間的任務,這些工人就是執行緒。乙個程序至少有乙個執行緒。簡單總結 單核cpu單位時間內只能執行乙個程序,而乙個程序至少由乙個執行緒構成,使用多執行緒和多程...
python執行緒與程序
直接呼叫 import threading,time def run n print running n time.sleep 2 t1 threading.thread target run,args test1 生成乙個執行緒例項 t2 threading.thread target run,a...
python 程序與執行緒
執行緒是作業系統能夠進行運算排程的最小單位,它包含在程序之中,是程序中的實際運作單位。一條執行緒指的是程序中乙個單一順序的控制流,乙個程序中可以併發多個執行緒,每條執行緒並行執行不 同的任務。程序 qq要以乙個整體的形式暴露給作業系統功能管理,裡面包含對各種資源的呼叫。記憶體對各種資源管理的集合 就...