![](/img/trans.png)
[英]How to stop openpyxl - python from clearing my excel file every time I re-run the program?
[英]How to re-run my python flask application every night?
我有一個python flask應用程序,當app.py運行時,我在其中緩存了一些數據。
有一個這樣的函數調用:
cache_data()
我希望此功能每晚運行一次。 有什么方法可以安排腳本自己重新運行,還是僅在current_date的日期更改時要調用的函數重新運行?
if __name__ == "__main__":
port = 80
os.system("open http://localhost:{0}".format(port))
app.debug = True # Turn False later
app.run(host='0.0.0.0', port=port)
您可以使用Python Rq放入隊列系統。
您可以在app.py
中生成一個線程,該線程調用/cache
調用並休眠24小時。
您可以執行以下操作:
if __name__ == "__main__":
when_to_run = # Set first run datetime
time_to_wait = when_to_run - datetime.now()
while True:
time.sleep(time_to_wait.seconds)
# run your stuff here
when_to_run = # Set next run datetime
time_to_wait = when_to_run - datetime.now()
假設您希望此代碼每天在上午10點運行,您可以將when_to_run設置為今天上午10點,或者如果已經設置為過去,明天設置為上午10點,並在循環中添加帶有timedelta的日期。 如果您只設置睡眠24小時,則執行時間會因每次執行所花費的時間而延遲。
例:
每天下午1點運行材料:
if __name__ == "__main__":
when_to_run = datetime.now().replace(hour=13, minute=0, second=0, microsecond=0)
if datetime.now() > when_to_run:
# First run is tomorrow
when_to_run += timedelta(days=1)
time_to_wait = when_to_run - datetime.now()
while True:
time.sleep(time_to_wait.seconds)
# run your stuff here
stuff.run()
when_to_run += timedelta(days=1)
time_to_wait = when_to_run - datetime.now()
我不確定這是否適合您的特定用例,但是您可以在給定的時間段內緩存該函數的結果:
import functools
from datetime import datetime, timedelta
def cache(delta):
if not hasattr(cache, 'results'):
cache.results = {}
cache.timeout = {}
def decorator(function):
@functools.wraps(function)
def inner(*args, **kwargs):
key = repr((function, args, kwargs))
if key not in cache.results or cache.timeout[key] <= datetime.now():
cache.results[key] = function(*args, **kwargs)
cache.timeout[key] = datetime.now() + delta
return cache.results[key]
return inner
return decorator
@cache(timedelta(seconds=2))
def f():
return datetime.now()
在相同的2秒間隔內兩次調用f()
將返回相同的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.