Python自动更新功能

时间:2018-12-11 14:42:56

标签: python python-3.x function methods auto-update

我正在为一个项目编写此代码,并且我有此类可以解析OWM中的Weather。 我在本节中的代码如下:

class Meteo():
    def __init__(self):
        self.API = pyowm.OWM('My API Key', config_module=None,
                             language='it', subscription_type=None)
        self.location = self.API.weather_at_place('Rome,IT')
        self.weatherdata = self.location.get_weather()
        self.weather = str(self.weatherdata.get_detailed_status())

    def Temperature(self):
        self.tempvalue = self.weatherdata.get_temperature('celsius')
        temperature = str(self.tempvalue.get('temp'))
        return temperature

当然,问题在于,如果在下午2点(即20°C)运行程序,直到凌晨2点,它仍将显示相同的温度,因为(显然)它保持了启动时解析的温度。 我在网上搜索了自动更新python函数的信息,但没有找到解释我的情况的问题。 如果有人可以回答或指出我要解释的地方,我将不胜感激。 谢谢

3 个答案:

答案 0 :(得分:0)

我只更新天气数据,然后返回温度:

def update_weather(self):
    self.weatherdata = self.location.get_weather()
    self.weather = str(self.weatherdata.get_detailed_status())

def Temperature(self):
    update_weather()
    self.tempvalue = self.weatherdata.get_temperature('celsius')
    temperature = str(self.tempvalue.get('temp'))
    return temperature

答案 1 :(得分:0)

您需要的是一个带有时间戳的缓存值的属性,这样,如果该值过期,则发出请求以获取当前值。像这样: 可以将其制成装饰器,但需要更长的时间:

class Meteo():
    def __init__(self):
        self.last_update = 0

    def Temperature(self):

        if (time.time() - self.last_update) > 60: # cache the value for 60 seconds
            self.API = pyowm.OWM('My API Key', config_module=None,
                                 language='it', subscription_type=None)
            self.location = self.API.weather_at_place('Rome,IT')
            self.weatherdata = self.location.get_weather()
            self.weather = str(self.weatherdata.get_detailed_status())
            self.last_update = time.time()

        self.tempvalue = self.weatherdata.get_temperature('celsius')
        temperature = str(self.tempvalue.get('temp'))
        return temperature

无论您多久致电一次温度,它最多每60秒只会发出一个请求。

答案 2 :(得分:0)

通常,没有任何魔法在发生。如果需要当前数据,则需要获取它。

在许多情况下,例如,如果您以某种形式或按计划处理数据,则可以选择触发“数据更新”。

如果您的用例足以每小时获取一次当前温度,则听起来某种形式的Cron作业可以解决您的问题。计划任务的全部重点是按照预设的时间表执行任务。结帐Wikipedia

也许Aaron_ab(How do I get a Cron like scheduler in Python?)中的链接最适合您的情况。 或看看Celery Beat

如果您不需要始终运行应用程序,则最好在操作系统上使用cron并让它在必要时执行您的应用程序。