如何仅在一天中的特定时段 运行 Python 编写脚本?
How to run Python script only during certain hours of the day?
我有一个脚本,我需要在早上 7 点到晚上 9 点之间运行。该脚本已经 运行 无限期地运行,但如果我能够在上述时间之外暂停它,那将最大限度地减少它产生的数据量。
我目前在某些部分使用 time.sleep(x)
,但 time.sleep(36000)
似乎有点傻?
使用 Python 2.7
提前致谢!
您可以使用时间函数来检查现在是几点,然后在需要时调用您的脚本:
import time
import subprocess
process = None
running = False
while True:
if time.daylight and not running:
# Run once during daylight
print 'Running script'
process = subprocess.Popen("Myscript.py")
running = True
elif not time.daylight and running:
# Wait until next day before executing again
print 'Terminating script'
process.kill()
running = False
time.sleep(600) # Wait 10 mins
您应该考虑使用像 cron 这样的调度程序。但是,如果脚本要无限期地运行,我认为time.sleep(36000)
是可以接受的(或time.sleep(10*60*60)
)。
您应该使用 cron 作业(如果您是 运行 Linux
)。
例如:每天早上 7 点到 9 点之间执行您的 python
脚本。
0 7 * * * /bin/execute/this/script.py
- 分钟:0
- 小时:7
- 一个月中的第几天:*(一个月中的每一天)
- 月份:*(每个月)
- 周:*(全部)
现在假设您想在上午 9 点退出程序。
您可以像这样实现您的 python 代码,以便它在 2 小时后自动终止。
import time
start = time.time()
PERIOD_OF_TIME = 7200 # 120 min
while True :
... do something
if time.time() > start + PERIOD_OF_TIME : break
我有一个脚本,我需要在早上 7 点到晚上 9 点之间运行。该脚本已经 运行 无限期地运行,但如果我能够在上述时间之外暂停它,那将最大限度地减少它产生的数据量。
我目前在某些部分使用 time.sleep(x)
,但 time.sleep(36000)
似乎有点傻?
使用 Python 2.7
提前致谢!
您可以使用时间函数来检查现在是几点,然后在需要时调用您的脚本:
import time
import subprocess
process = None
running = False
while True:
if time.daylight and not running:
# Run once during daylight
print 'Running script'
process = subprocess.Popen("Myscript.py")
running = True
elif not time.daylight and running:
# Wait until next day before executing again
print 'Terminating script'
process.kill()
running = False
time.sleep(600) # Wait 10 mins
您应该考虑使用像 cron 这样的调度程序。但是,如果脚本要无限期地运行,我认为time.sleep(36000)
是可以接受的(或time.sleep(10*60*60)
)。
您应该使用 cron 作业(如果您是 运行 Linux
)。
例如:每天早上 7 点到 9 点之间执行您的 python
脚本。
0 7 * * * /bin/execute/this/script.py
- 分钟:0
- 小时:7
- 一个月中的第几天:*(一个月中的每一天)
- 月份:*(每个月)
- 周:*(全部)
现在假设您想在上午 9 点退出程序。
您可以像这样实现您的 python 代码,以便它在 2 小时后自动终止。
import time
start = time.time()
PERIOD_OF_TIME = 7200 # 120 min
while True :
... do something
if time.time() > start + PERIOD_OF_TIME : break