我遇到了Python中非常奇怪的情況。Python函數緩存?
我有一個while True:
循環的腳本,不斷抓住實時數據。數據只能在工作時間內抓取,因此我在名爲lib/date.py
的模塊中有一個幫助函數。
這是函數:
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
我意識到次檢查的方法是矯枉過正,但是這是我的功能的簡化版本。我真正的功能還包括一系列時區轉換,這些轉換使上述必要。
這是我的主要腳本(簡體):
def main():
while True:
do_ten_seconds()
def do_ten_seconds():
log.info("alive")
for i in xrange(10):
if isTime():
log.info("its time")
# do data grabbing
sleep(1)
在本週這工作完全,第二天早上停止每週晚上繼續進行。但是,在週末,它不會從長時間休息中「恢復」。換言之,週一上午isTime
永遠不會返回True
。
我檢查了日誌,並且腳本每10秒打印一次「活動」,但數據抓取部分從未發生過(並且「它的時間」從不打印)。因此,我假設這意味着isTime
返回False
。
難道這是因爲該函數在週末被頻繁調用,並且因爲它連續返回False
很多次,所以Python會緩存結果並從不從其中恢復?
當我產卵的代碼相同的實例,同時主腳本仍然在isTime
在返回False
故障模式下運行,新實例從isTime
得到True
並開始正常工作。
這是怎麼回事?
很酷 - 非常感謝你! – user1094786