ホームページ >バックエンド開発 >Python チュートリアル >定期的にdatabase_pythonを変更するためのPythonサンプルコード
この記事では主にPythonでデータベースを定期的に変更するためのサンプルコードを紹介していますが、編集者が非常に良いと思ったので、参考として共有させていただきます。エディターに従って、データベースを定期的に変更する必要がある場合は、通常、データベースを変更するためのスケジュールされたプロセスを開始することを選択します。この種のスケジュールされたタスクをビジネスに書き込んでインターフェイスとして記述すると、スケジュールされたプロセスは少し不適切に見えますか?データベースを定期的に 100 回変更する必要がある場合、従来の方法では 100 個のプロセスが起動されますが、このプロセスは非常に軽量ですが、それでも不快に感じます。実際、threading.Timer を使用して、ライブラリ変更操作を実行するための対応するスレッドを作成できます。その考え方は比較的単純です。
1. データベース変更操作が実行される時刻である update_time を渡し、update_time と現在時刻の間の減算メソッドを使用して、データベース変更操作までの time_lay を取得します。 2 つの標準時刻書式文字列間の時刻の差を見つけるには、datetime.datetime.strptime() を使用して時刻を書式設定できます。書式設定された時刻を直接減算し、.秒() を実行することで結果を秒に変換できます。
2. ライブラリ変更操作を update() メソッドにカプセル化し、threading.Timer によって作成されたスレッドに更新と時刻の差を渡します。使用方法は threading.Timer(interval, function, args=[], kwargs=) です。 {}) でスレッド インスタンスを作成します。間隔は実行を遅らせる時間です。単位は秒です。その後、start() が実行されます。タイマーはノンブロッキングであり、相互に影響を与えることなく複数のスレッドを作成できます。 コードは以下の通りです#!/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をフロントエンドから渡されるパラメータに変更することで、その時点でデータベース変更操作を実行することができます。そのとき、最後の行に commit() が追加されていなかったため、データベース変更操作が有効にならないという小さな落とし穴に遭遇しました。本来、ライブラリを変更するコミットは基本クラス BaseHandler に記述されて有効になりますが、ここでの update() は Timer スレッドで実行され、非同期操作である Commit() をスレッド内で実行する必要があります。変更が有効になります。
Python でのファイルの読み取りと書き込みに関する詳細な説明
以上が定期的にdatabase_pythonを変更するためのPythonサンプルコードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。