久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

        手機站
        千鋒教育

        千鋒學習站 | 隨時隨地免費學

        千鋒教育

        掃一掃進入千鋒手機站

        領(lǐng)取全套視頻
        千鋒教育

        關(guān)注千鋒學習站小程序
        隨時隨地免費學習課程

        當前位置:首頁  >  技術(shù)干貨  > Python 定時修改數(shù)據(jù)庫

        Python 定時修改數(shù)據(jù)庫

        來源:千鋒教育
        發(fā)布人:xqq
        時間: 2023-11-06 06:03:51 1699221831

        當需要定時修改數(shù)據(jù)庫時,一般我們都選擇起一個定時進程去改庫。如果將這種定時任務(wù)寫入業(yè)務(wù)中,寫成一個接口呢,定時進程顯得有些不太合適?如果需要定時修改100次數(shù)據(jù)庫,常規(guī)做法會啟動100個進程,雖然這種進程非常輕量級,但還是會感覺不爽。實際上我們可以使用threading.Timer創(chuàng)建相應(yīng)的線程來執(zhí)行改庫操作,思路也比較簡單。

        1.傳入執(zhí)行改庫操作的時間update_time,用update_time和當前時間相減法,得到距離改庫操作還有多少時間time_delay。求兩個標準時間格式字符串的時間差可以使用datetime.datetime.strptime()來格式化時間,格式化后的時間可以直接相減法,對結(jié)果執(zhí)行.seconds()就可以轉(zhuǎn)化成秒

        2.將改庫操作封裝成方法update(),然后將update和時間差傳入threading.Timer創(chuàng)建的線程,用法為threading.Timer(interval,function,args=[],kwargs={})創(chuàng)建線程實例,interval為延遲執(zhí)行的時間,單位是秒,然后,start()執(zhí)行。Timer是非阻塞的,可以創(chuàng)建出多個線程互不影響。

        代碼如下

        #!/usr/bin/envpython3

        #-*-coding:utf-8-*-

        frommodelimportTable

        fromhandler.base_handlerimportBaseHandler

        fromthreadingimportTimer

        importdatetime

        classTimeHandler(BaseHandler):

        defdo_action(self):

        update_time="2018-04-0718:00:00"

        ads_id="test_1"

        t_online=datetime.datetime.strptime(update_time,'%Y-%m-%d%H:%M:%S')

        now=datetime.datetime.now().strftime('%Y-%m-%d%H:%M:%S')

        t_now=datetime.datetime.strptime(now,'%Y-%m-%d%H:%M:%S')

        time_delay=(t_online-t_now).seconds

        t1=Timer(time_delay,self.update,(ads_id,))

        t1.start()

        self.result="success"

        return

        defupdate(self,ads_id):

        self.db.dsp.query(Table).filter(Table.ads_id==ads_id).update({Table.is_del:0})

        self.db.dsp.commit()

        可以將update_time改為前端傳入的參數(shù),就可以在該時間執(zhí)行改庫操作了。當時遇到了一個小坑,就是改庫操作沒有生效,原因是沒加最后一行的commit()。本來改庫的commit生效是寫在基類BaseHandler重的,但是這里的update()在Timer線程中執(zhí)行,屬于異步操作,需要在線程中執(zhí)行commit()使改動生效。

        這種借助Timer定時執(zhí)行的方法比傳統(tǒng)的定時進程更輕量,也更簡單,但是也有著明顯的缺點。當服務(wù)關(guān)閉時,所有的定時線程也就隨著主進程一起銷毀,所有線程都能成功執(zhí)行的前提條件是服務(wù)必須穩(wěn)定,不能重啟。如果想要重啟服務(wù),就需要想辦法將未完成的任務(wù)落盤(比如寫到數(shù)據(jù)庫中),然后啟動服務(wù)時讀取之前未完成的任務(wù)重新創(chuàng)建定時線程。

        以上內(nèi)容為大家介紹Python定時修改數(shù)據(jù)庫,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓機構(gòu):千鋒教育。http://m.2667701.com/


        tags: python培訓
        聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
        10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
        請您保持通訊暢通,專屬學習老師24小時內(nèi)將與您1V1溝通
        免費領(lǐng)取
        今日已有369人領(lǐng)取成功
        劉同學 138****2860 剛剛成功領(lǐng)取
        王同學 131****2015 剛剛成功領(lǐng)取
        張同學 133****4652 剛剛成功領(lǐng)取
        李同學 135****8607 剛剛成功領(lǐng)取
        楊同學 132****5667 剛剛成功領(lǐng)取
        岳同學 134****6652 剛剛成功領(lǐng)取
        梁同學 157****2950 剛剛成功領(lǐng)取
        劉同學 189****1015 剛剛成功領(lǐng)取
        張同學 155****4678 剛剛成功領(lǐng)取
        鄒同學 139****2907 剛剛成功領(lǐng)取
        董同學 138****2867 剛剛成功領(lǐng)取
        周同學 136****3602 剛剛成功領(lǐng)取
        相關(guān)推薦HOT
        乡宁县| 宁武县| 满城县| 长顺县| 辽阳县| 高台县| 和林格尔县| 太仓市| 炎陵县| 安平县| 嘉峪关市| 历史| 晋宁县| 连山| 山阳县| 孟连| 镇平县| 丹寨县| 和龙市| 莎车县| 德庆县| 大冶市| 吴忠市| 武穴市| 福清市| 南乐县| 揭阳市| 石屏县| 宁乡县| 房山区| 塔城市| 新丰县| 修水县| 天祝| 开阳县| 洛阳市| 崇礼县| 濉溪县| 浑源县| 桦川县| 屏东县|