程序池 執行緒池和協程

2022-08-13 16:12:16 字數 1224 閱讀 2096

import time

from threading import timer

def task():

print('執行緒 start')

time.sleep(2)

print('執行緒 end')

t = timer(4, task) # 4s以後開啟乙個執行緒

t.start()

程序池、執行緒池的功能:限制程序數或執行緒數

當併發的任務數量遠遠大於計算機所能承受的範圍,即無法一次性開啟過多的任務數量,這時候應該考慮去限制我程序數或執行緒數,從而保證伺服器不崩潰。

程序池始終不會產生新的程序,如processpoolexecutor(3),所有的任務都是由這3個程序執行的。

from concurrent.futures import processpoolexecutor,threadpoolexecutor

from multiprocessing import current_process

from threading import currentthread

import time

def task(i):

print(f'執行緒 在執行任務')

time.sleep(2)

return i ** 2

if __name__ == '__main__':

pool = threadpoolexecutor(3)

fu_list =

for i in range(15):

future = pool.submit(task, i)

pool.shutdown()

for fu in fu_list:

print(fu.result())

為當前任務繫結乙個函式,在當前任務執行結束的時候會觸發這個函式,這個函式稱之為**函式。

python的執行緒用的是作業系統原生的執行緒

協程:單執行緒下實現併發

遇到io切換的時候才有意義

協程概念本質是程式設計師自己抽象出來的,作業系統根本不知道協程的存在,也就是說來乙個執行緒遇到了io,執行緒內部直接自己切換到別的任務上了,作業系統根本發現不了,也就實現了單執行緒下效率最高。

優點:自己控制切換要比作業系統控制切換快的多

缺點:對比多執行緒,自己要檢測所有的io,但凡有乙個阻塞,整體都會跟著阻塞

​ 對比多程序,無法利用多核優勢

併發程式設計 執行緒池程序池協程

1.socket服務端實現併發 現在回來想網路程式設計服務端需要滿足哪幾點需求 2.程序池執行緒池介紹 執行緒不可能無限制的開下去,總要消耗和占用資源 程序池執行緒池概念 硬體有極限,為了減輕硬體壓力,所以有了池的概念 注意協程這個概念完全是程式設計師自己想出來的東西,它對於作業系統來說根本不存在。...

程序,執行緒和協程

程序 process 和執行緒 thread 是程式設計師必需掌握的核心知識。而多程序和多執行緒程式設計對於 的並行併發執行,提公升 效率和縮短執行時間至關重要。簡單總結 程序是資源分配的單位 執行緒是作業系統排程的單位 程序切換需要的資源很最大,效率很低 執行緒切換需要的資源一般,效率一般 當然了...

程序池 執行緒池

程序池和執行緒池相似,所以這裡我們以程序池為例介紹,下面對程序池的討論完全適用於執行緒池 如果沒有特殊宣告 程序池是由伺服器預先建立的一組子程序,這些子程序的數目在3 10個之間 典型情況 執行緒池的數量應該和cpu數量差不多。程序池中的所有子程序都執行者相同的 並具有相同的屬性。因為程序池在伺服器...