Apscheduler定时任务无法终止求助:纽约时段任务持续运行
问题分析
你的代码存在三个核心问题:
- Cron配置
hour='6-7', minute='*'会让任务每分钟触发一次,而非单个任务持续运行1小时; range(0,60)的循环变量i最大值为59,永远触发不了i==60的停止判断;sched.remove_job('cron')参数错误,需要传入任务ID而非触发器类型。
以下是两种匹配你需求的可行方案:
方案一:单个任务每天6点启动,持续运行至7点停止
适合需要连续运行1小时的场景(比如持续采集数据):
from apscheduler.schedulers.blocking import BlockingScheduler from datetime import datetime import time import pytz def usny_curtime(): nyc_datetime = datetime.now(pytz.timezone('America/New_York')) fmt = '%Y-%m-%d %H:%M:%S' return nyc_datetime.strftime(fmt) sched = BlockingScheduler(timezone='America/New_York') # 每天纽约时间6点触发一次任务 @sched.scheduled_job('cron', hour='6', id='daily_stock_job') def get_stock_data(): # 循环运行至纽约时间7点整停止 while datetime.now(pytz.timezone('America/New_York')).hour < 7: us_time = usny_curtime() print("***US time", us_time) print("*******LOCAL TIME", time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())) # 在这里添加你的业务逻辑(比如采集股票数据) # 控制执行间隔,避免资源占用过高,这里设为1分钟 time.sleep(60) sched.start()
方案二:每分钟执行一次任务,仅在6-7点之间运行
适合需要每分钟执行单次操作的场景:
from apscheduler.schedulers.blocking import BlockingScheduler from datetime import datetime import pytz def usny_curtime(): nyc_datetime = datetime.now(pytz.timezone('America/New_York')) fmt = '%Y-%m-%d %H:%M:%S' return nyc_datetime.strftime(fmt) sched = BlockingScheduler(timezone='America/New_York') # 每天纽约时间6点整至6点59分,每分钟执行一次任务(若要包含7点整,将hour改为'6-7') @sched.scheduled_job('cron', hour='6', minute='*', id='minute_stock_job') def get_stock_data(): us_time = usny_curtime() print("***US time", us_time) print("*******LOCAL TIME", datetime.now().strftime('%Y-%m-%d %H:%M:%S')) # 在这里添加你的单次业务逻辑(比如单次采集股票数据) sched.start()
内容的提问来源于stack exchange,提问作者YL Leung
相关产品推荐
相关产品推荐

