我正在为一个项目编写此代码,并且我有此类可以解析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函数的信息,但没有找到解释我的情况的问题。 如果有人可以回答或指出我要解释的地方,我将不胜感激。 谢谢
答案 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并让它在必要时执行您的应用程序。