Python定時(shí)器線程池原理詳解
這篇文章主要介紹了Python定時(shí)器線程池原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
定時(shí)器執(zhí)行循環(huán)任務(wù):
知識(shí)儲(chǔ)備
Timer(interval, function, args=None, kwargs=None)
interval ===》 時(shí)間間隔 單位為s
function ===》 定制執(zhí)行的函數(shù)
使用threading的 Timer 類
start() 為通用的開始執(zhí)行方法
cancel ()為取消執(zhí)行的方法
普通單次定時(shí)執(zhí)行
from threading import Timerimport time# 普通單次定時(shí)器def handle():print('普通單次定時(shí)器 函數(shù)被執(zhí)行');t1=Timer(interval=1,function=handle);t1.start();
定時(shí)循環(huán)執(zhí)行
from threading import Timerimport time# 循環(huán)定時(shí)器def loop_handle():print('循環(huán)定時(shí)器定時(shí)器 函數(shù)被執(zhí)行');global t2;t2=Timer(interval=1,function=loop_handle);t2.start(); t2=Timer(interval=1,function=loop_handle);t2.start(); time.sleep(5);# 對(duì)主線程停止5s;t2.cancel(); # t2 在主main 線程阻塞5s t2執(zhí)行5s
線程池技術(shù)
基本概念
在程序啟動(dòng)時(shí)就創(chuàng)建好若干個(gè)線程,并保存到內(nèi)存中 。 當(dāng)線程啟動(dòng)并執(zhí)行完成之后,并不做銷毀處理,而是等待下次再使用。i:節(jié)約了創(chuàng)建進(jìn)程 銷毀進(jìn)程的時(shí)間,大大降低進(jìn)程的開銷
實(shí)現(xiàn)
搶占式:線程池中的線程執(zhí)行順序不固定。該方式使用 ThreadPoolExecutor的 submit ()方法實(shí)現(xiàn)。
具體執(zhí)行那個(gè)線程是隨機(jī)的, 并且執(zhí)行的函數(shù)也可以不一致
那個(gè)線程執(zhí)行的函數(shù)出現(xiàn)了崩潰,不影響整個(gè)線程池的其他線程的運(yùn)行
使用with 語法 進(jìn)行簡(jiǎn)化操作
非搶占式:線程將按照調(diào)用的順序執(zhí)行 。 此方式使用 ThreadPoolExecutor 的 map ()方法來實(shí)現(xiàn)
每個(gè)線程處理的函數(shù)都是一致的,一個(gè)線程執(zhí)行的函數(shù)崩潰,整體就崩潰
基本code
from concurrent.futures import ThreadPoolExecutor # 導(dǎo)入線程池import timedef printName(name):print('名字',name);time.sleep(2);nameList=[’Tom’,’jirl’,’steam’];# 搶占式線程池start2=time.time();with ThreadPoolExecutor(3) as executor:for i in nameList:# 因?yàn)槊看螆?zhí)行的函數(shù)不一致,所以參數(shù)要分開傳遞executor.submit(printName,i); end2=time.time();print('2 speed:',str(end2-start2));#非搶占式線程池
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. js實(shí)現(xiàn)碰撞檢測(cè)2. 我所理解的JavaScript中的this指向3. JS實(shí)現(xiàn)前端動(dòng)態(tài)分頁碼代碼實(shí)例4. 用Spring JMS使異步消息變得簡(jiǎn)單5. PHP驗(yàn)證碼工具-Securimage6. spring acegi security 1.0.0 發(fā)布7. 關(guān)于IDEA 2020.3 多窗口視圖丟失的問題8. javascript實(shí)現(xiàn)貪吃蛇小練習(xí)9. Vue 實(shí)現(xiàn)對(duì)quill-editor組件中的工具欄添加title10. 一文帶你徹底理解Java序列化和反序列化

網(wǎng)公網(wǎng)安備