Python函数缓存?
我在Python中遇到了一个非常奇怪的情况 我在脚本中有一个Python函数缓存?,python,function,caching,return,Python,Function,Caching,Return,我在Python中遇到了一个非常奇怪的情况 我在脚本中有一个while True:循环,它不断地捕获实时数据。数据只能在工作时间抓取,因此我在名为lib/date.py的模块中有一个helper函数 这就是功能: def isTime(utc_now=datetime.datetime.utcnow()): ''' 9:00 AM UTC - 5:00 PM UTC Mon - Fri. The parameter utc_now can be used to spe
while True:
循环,它不断地捕获实时数据。数据只能在工作时间抓取,因此我在名为lib/date.py
的模块中有一个helper函数
这就是功能:
def isTime(utc_now=datetime.datetime.utcnow()):
'''
9:00 AM UTC - 5:00 PM UTC Mon - Fri.
The parameter utc_now can be used to specify a specific
datetime to be checked instead of the utcnow().
'''
week_day = utc_now.weekday()
# no good on Saturdays and Sundays
if 5 == week_day or 6 == week_day:
return False
now_int = (utc_now.hour * 60) + utc_now.minute
if (17 * 60) >= now_int >= (9 * 60):
return True
return False
我意识到检查时间的方式有些过分,但这是我函数的简化版本。我的真实函数还包括一系列时区转换,这使得上述内容成为必要
这是我的主要脚本(简化):
这在一周内非常有效,每周晚上停止,第二天早上继续。然而,在周末,它并没有从长时间的休息中“恢复”。换句话说,isTime
不会在周一早上返回True
我检查了日志,脚本只是每隔10秒打印一次“活动”,但数据获取部分从未发生过(而且“它的时间”也从未打印过)。因此,我假设这意味着isTime
返回False
可能是因为函数在周末被频繁调用,并且因为它连续多次返回False
,Python会缓存结果,并且永远不会从中恢复吗
当我在主脚本仍在错误模式下运行时生成相同的代码实例时,isTime
返回False
,新实例将从isTime
获得True
,并开始正常工作
发生了什么?第一次导入date.py时,以下行运行一次:
def isTime(utc_now=datetime.datetime.utcnow()):
运行时,
utc\u now
的默认值设置为该时刻的时间,并且永远不会重新计算。默认参数在编译时计算。设置默认值None
,并使用检查是否为None
def isTime(utc_now=datetime.datetime.utcnow()):