python 定時修改資料庫的範例程式碼_python

來源:互聯網
上載者:User
這篇文章主要介紹了python 定時修改資料庫的範例程式碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

當需要定時修改資料庫時,一般我們都選擇起一個定時進程去改庫。如果將這種定時任務寫入業務中,寫成一個介面呢,定時進程顯得有些不太合適?如果需要定時修改100次資料庫,常規做法會啟動100個進程,雖然這種進程非常輕量級,但還是會感覺不爽。實際上我們可以使用threading.Timer建立相應的線程來執行改庫操作,思路也比較簡單。

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

2.將改庫操作封裝成方法update(),然後將update和時間差傳入threading.Timer建立的線程,用法為threading.Timer(interval, function, args=[], kwargs={})建立線程執行個體,interval為順延強制的時間,單位是秒,然後,start()執行。Timer是非阻塞的,可以建立出多個線程互不影響。

代碼如下


#!/usr/bin/env python3# -*- coding: utf-8 -*-from model import Tablefrom handler.base_handler import BaseHandlerfrom threading import Timerimport datetimeclass TimeHandler(BaseHandler):  def do_action(self):    update_time = "2018-04-07 18: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  def update(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改為前端傳入的參數,就可以在該時間執行改庫操作了。當時遇到了一個小坑,就是改庫操作沒有生效,原因是沒加最後一行的commit()。本來改庫的commit生效是寫在基類BaseHandler重的,但是這裡的update()在Timer線程中執行,屬於非同步作業,需要線上程中執行commit()使改動生效。

這種藉助Timer定時執行的方法比傳統的定時進程更輕量,也更簡單,但是也有著明顯的缺點。當服務關閉時,所有的定時線程也就隨著主進程一起銷毀,所有線程都能成功執行的前提條件是服務必須穩定,不能重啟。如果想要重啟服務,就需要想辦法將未完成的任務落盤(比如寫到資料庫中),然後啟動服務時讀取之前未完成的任務重新建立定時線程。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.