1.傳入執(zhí)行改庫(kù)操作的時(shí)間update_time,用update_time和當(dāng)前時(shí)間相減法,得到距離改庫(kù)操作還有多少時(shí)間time_delay。求兩個(gè)標(biāo)準(zhǔn)時(shí)間格式字符串的時(shí)間差可以使用datetime.datetime.strptime()來(lái)格式化時(shí)間,格式化后的時(shí)間可以直接相減法,對(duì)結(jié)果執(zhí)行.seconds()就可以轉(zhuǎn)化成秒
2.將改庫(kù)操作封裝成方法update(),然后將update和時(shí)間差傳入threading.Timer創(chuàng)建的線程,用法為threading.Timer(interval,function,args=[],kwargs={})創(chuàng)建線程實(shí)例,interval為延遲執(zhí)行的時(shí)間,單位是秒,然后,start()執(zhí)行。Timer是非阻塞的,可以創(chuàng)建出多個(gè)線程互不影響。
可以將update_time改為前端傳入的參數(shù),就可以在該時(shí)間執(zhí)行改庫(kù)操作了。當(dāng)時(shí)遇到了一個(gè)小坑,就是改庫(kù)操作沒(méi)有生效,原因是沒(méi)加最后一行的commit()。本來(lái)改庫(kù)的commit生效是寫在基類BaseHandler重的,但是這里的update()在Timer線程中執(zhí)行,屬于異步操作,需要在線程中執(zhí)行commit()使改動(dòng)生效。
這種借助Timer定時(shí)執(zhí)行的方法比傳統(tǒng)的定時(shí)進(jìn)程更輕量,也更簡(jiǎn)單,但是也有著明顯的缺點(diǎn)。當(dāng)服務(wù)關(guān)閉時(shí),所有的定時(shí)線程也就隨著主進(jìn)程一起銷毀,所有線程都能成功執(zhí)行的前提條件是服務(wù)必須穩(wěn)定,不能重啟。如果想要重啟服務(wù),就需要想辦法將未完成的任務(wù)落盤(比如寫到數(shù)據(jù)庫(kù)中),然后啟動(dòng)服務(wù)時(shí)讀取之前未完成的任務(wù)重新創(chuàng)建定時(shí)線程。
以上內(nèi)容為大家介紹Python定時(shí)修改數(shù)據(jù)庫(kù),希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://www.dietsnews.net/