執行緒池 The End

2022-04-26 07:10:43 字數 1862 閱讀 9409

執行緒池是乙個全新的模組--from concurrent.futures import threadpoolexecutor

concurrent.futures模組提供了高度封裝的非同步呼叫介面

threadpoolexecutor:執行緒池,提供非同步呼叫

processpoolexecutor: 程序池,提供非同步呼叫

執行緒池與程序池的用法完全一樣,提供的介面也是完全一致的

執行緒池不提供同步提交任務的方法,只有非同步提交

submit()

shutdown(wait)相當於程序池的pool.close+pool.join()的操作

wait = true 等待池內所有任務執行完畢**玩資源後才繼續

wait = false 立即返回,並不會等待池內的任務執行完畢

submit 和 map 必須在shutdown之前

map 拿不到返回值

result()取結果

add_done_callback(fn)**函式

import time

from concurrent.futures import threadpoolexecutor

def func(n):

time.sleep(1)

print(f'',end='\t')

return n*n

tp = threadpoolexecutor(max_workers=3)

for i in range(1,22):

t = tp.submit(func,i)

print(f'的冪為:',t.result(),end='\t')

if i %3 == 0:

print()

tp.shutdown() # 相當於close+join 沒有shutdown會更高效

print()

print('所有子程序結束!')

'''[1] 1的冪為: 1 [2] 2的冪為: 4 [3] 3的冪為: 9

[4] 4的冪為: 16 [5] 5的冪為: 25 [6] 6的冪為: 36

[7] 7的冪為: 49 [8] 8的冪為: 64 [9] 9的冪為: 81

[10] 10的冪為: 100 [11] 11的冪為: 121 [12] 12的冪為: 144

[13] 13的冪為: 169 [14] 14的冪為: 196 [15] 15的冪為: 225

[16] 16的冪為: 256 [17] 17的冪為: 289 [18] 18的冪為: 324

[19] 19的冪為: 361 [20] 20的冪為: 400 [21] 21的冪為: 441

所有子程序結束!

'''

import time

from concurrent.futures import threadpoolexecutor

def func(n):

time.sleep(1)

return n*n

def task(m):

print(f'*************')

tp = threadpoolexecutor(max_workers=3)

for i in range(3):

tp.submit(func,i).add_done_callback(task)

'''******0*******

******1*******

******4*******

'''

執行緒 執行緒池

執行緒池是一種多執行緒處理形式,處理過程中將任務新增到佇列,然後在建立執行緒後執行,主要實現 建立執行緒和管理執行緒,並且給執行緒分配任務。執行緒池中的執行緒是併發執行的。乙個比較簡單的執行緒池至少應包含執行緒池管理器 工作執行緒 任務列隊 任務介面等部分。其中執行緒池管理器的作用是建立 銷毀並管理...

執行緒 執行緒池

乙個簡單執行緒的建立和銷毀如下 與程序程序相比,執行緒是一種輕量級的工具,但是輕量並不代表沒有,它的建立和關閉依然需要花費時間,如果建立和銷毀的時間還大於執行緒本身完成的工作,那就會得不償失,甚至會造成out of memory。即使沒有,大量的執行緒 也會給gc帶來巨大的壓力。為了解決這樣的問題,...

mysql 執行緒池 c MySQL執行緒池

mysql執行緒池 在麼mysql中,執行緒池指的是用來管理處理mysql客戶端連線任務的執行緒的一種機制。如果把執行緒看做系統資源那麼執行緒池本質上是對系統資源的管理,對應作業系統來說執行緒的建立和銷毀是比較消耗系統資源的,頻繁的建立與銷毀執行緒必然給系統帶來不必要的資源浪費,特別是在高負載的情況...