欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 定時(shí)修改數(shù)據(jù)庫(kù)的示例代碼

 更新時(shí)間:2018年04月08日 09:22:00   作者:熔遁丶螺旋手里劍  
這篇文章主要介紹了python 定時(shí)修改數(shù)據(jù)庫(kù)的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

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

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è)線程互不影響。

代碼如下

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from model import Table
from handler.base_handler import BaseHandler
from threading import Timer
import datetime


class 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改為前端傳入的參數(shù),就可以在該時(shí)間執(zhí)行改庫(kù)操作了。當(dāng)時(shí)遇到了一個(gè)小坑,就是改庫(kù)操作沒有生效,原因是沒加最后一行的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í)線程。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python pyinstaller打包exe報(bào)錯(cuò)的解決方法

    python pyinstaller打包exe報(bào)錯(cuò)的解決方法

    這篇文章主要給大家介紹了關(guān)于python pyinstaller打包exe報(bào)錯(cuò)的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • python使用百度翻譯進(jìn)行中翻英示例

    python使用百度翻譯進(jìn)行中翻英示例

    這篇文章主要介紹了python使用百度翻譯進(jìn)行中翻英示例,需要的朋友可以參考下
    2014-04-04
  • 在Python中操作字典之clear()方法的使用

    在Python中操作字典之clear()方法的使用

    這篇文章主要介紹了在Python中操作字典之clear()方法的使用,是Python入門的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • python實(shí)現(xiàn)excel公式格式化的示例代碼

    python實(shí)現(xiàn)excel公式格式化的示例代碼

    這篇文章主要介紹了python實(shí)現(xiàn)excel公式格式化的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 利用Python將圖片批量轉(zhuǎn)化成素描圖的過(guò)程記錄

    利用Python將圖片批量轉(zhuǎn)化成素描圖的過(guò)程記錄

    萬(wàn)能的Python真的是除了不會(huì)生孩子,其他的還真不在話下,下面這篇文章主要給大家介紹了關(guān)于如何利用Python將圖片批量轉(zhuǎn)化成素描圖的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • python實(shí)現(xiàn)巡檢系統(tǒng)(solaris)示例

    python實(shí)現(xiàn)巡檢系統(tǒng)(solaris)示例

    這篇文章主要介紹了python實(shí)現(xiàn)巡檢系統(tǒng)(solaris)示例,需要的朋友可以參考下
    2014-04-04
  • python之消除前綴重命名的方法

    python之消除前綴重命名的方法

    今天小編就為大家分享一篇python之消除前綴重命名的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • PyTorch中model.zero_grad()和optimizer.zero_grad()用法

    PyTorch中model.zero_grad()和optimizer.zero_grad()用法

    這篇文章主要介紹了PyTorch中model.zero_grad()和optimizer.zero_grad()用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • python web基礎(chǔ)之加載靜態(tài)文件實(shí)例

    python web基礎(chǔ)之加載靜態(tài)文件實(shí)例

    下面小編就為大家分享一篇python web基礎(chǔ)之加載靜態(tài)文件實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Python數(shù)據(jù)結(jié)構(gòu)之雙向鏈表詳解

    Python數(shù)據(jù)結(jié)構(gòu)之雙向鏈表詳解

    單鏈表只有一個(gè)指向直接后繼的指針來(lái)表示結(jié)點(diǎn)間的邏輯關(guān)系,可以方便的從任一結(jié)點(diǎn)開始查找其后繼結(jié)點(diǎn),但要找前驅(qū)結(jié)點(diǎn)則比較困難,雙向鏈表是為了解決這一問(wèn)題,使用兩個(gè)指針表示結(jié)點(diǎn)間的邏輯關(guān)系。本文將重點(diǎn)為大家介紹雙向鏈表的相關(guān)操作,需要的可以參考一下
    2022-01-01

最新評(píng)論