我想写一个python脚本在服务器上运行,该服务器将检查数据库的更改(例如记录总数),当发生一个时,它将执行一个操作。
我是python中的新手,我不知道如何处理这个问题,是否有一个提议的事件监听方法来优化CPU消耗并确保平稳运行?
我不是要求具体的代码,而是更像是高层次的想法。
编辑:在KT。的有用响应后,我构建了这段代码来实现一个监听器,用于从URI api中更改json响应:
import json
import time
import requests
class Test():
def __init__(self):
self.total_services = self.__get_total_services()
def __get_total_services(self):
url = "my_url_that_responds_with_json"
response = requests.get(url)
json_data = response.json()
dict_data = json.loads(json.dumps(json_data))
total = len(dict_data['services'])
return total
def listen_for_changes(self):
while 1:
if (self.__get_total_services() != self.total_services):
self.total_services = self.__get_total_services()
"""do something"""
time.sleep(60)
return 0
my_test = Test()
my_test.listen_for_changes()
我的问题是这个代码应该在后台以某种方式运行,还是可以从我的服务器运行它?
答案 0 :(得分:2)
通常,有两种方法可以检测数据库中的更改(或其他任何地方,实际上):
轮询 - 定期从代码中查询数据库并检测Python代码中的更改。这种方法简单明了,但如果过于频繁地进行轮询,可能确实会对资源造成一点浪费。
通知 - 配置数据库以跟踪更改并通知您的应用程序。这种方法在资源使用方面可能看起来更合理,但实施起来可能会变得非常烦人和混乱,除非你被迫,否则你不想这样做。 在最常见的情况下,这种方法需要您:
或者,如果您的数据库仅从另一个应用程序更改,则可以配置该应用程序,以便在发生更改时向您发送通知。如果您的数据库不支持触发器,这可能是您实施基于通知的解决方案的唯一机会(如果有的话)。