定時器執行循環任務:
?
- 知識儲備
- Timer(interval, function, args=None, kwargs=None)
- interval ===》 時間間隔 單位為s
- function ===》 定制執行的函數
- 使用threading的 Timer 類
- start() 為通用的開始執行方法
- cancel ()為取消執行的方法
- 普通單次定時執行
from threading import Timer import time # 普通單次定時器 def handle(): print( "普通單次定時器 函數被執行" ); t1 =Timer(interval=1,function= handle); t1.start();
?
定時循環執行
from threading import Timer import time # 循環定時器 def loop_handle(): print("循環定時器定時器 函數被執行"); global t2; t2=Timer(interval=1,function=loop_handle); t2.start(); t2=Timer(interval=1,function=loop_handle); t2.start(); time.sleep(5);# 對主線程停止5s; t2.cancel(); # t2 在主main 線程阻塞5s t2執行5s
線程池技術
?
?
基本概念
- 在程序啟動時就創建好若干個線程,并保存到內存中 。 當線程啟動并執行完成之后,并不做銷毀處理,而是等待下次再使用。
i:節約了創建進程 銷毀進程的時間,大大降低進程的開銷
- 實現
-
搶占式:線程池中的線程執行順序不固定。該方式使用 ThreadPoolExecutor的 submit ()方法實現。
- 具體執行那個線程是隨機的, 并且執行的函數也可以不一致
- 那個線程執行的函數出現了崩潰,不影響整個線程池的其他線程的運行
- 使用with 語法 進行簡化操作
- 非搶占式:線程將按照調用的順序執行 。 此方式使用 ThreadPoolExecutor 的 map ()方法來實現
- 每個線程處理的函數都是一致的,一個線程執行的函數崩潰,整體就崩潰
基本code
from concurrent.futures import ThreadPoolExecutor # 導入線程池 import time def printName(name): print( "名字" ,name); time.sleep( 2 ); nameList =['Tom','jirl','steam' ]; # 搶占式線程池 start2 = time.time(); with ThreadPoolExecutor( 3 ) as executor: for i in nameList:# 因為每次執行的函數不一致,所以參數要分開傳遞 executor.submit(printName,i); end2 = time.time(); print( "2 speed:",str(end2- start2)); #非搶占式線程池
?
?
線程數量公式:
公式
?
?
經驗
(1 )初始化一定數量的線程。
( 2 )在多次實驗中遞增或遞減線程數量 ,測試運行性能 。
(3 )確定最憂 的線程數量。
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
