You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apscheduler定时任务无法终止求助:纽约时段任务持续运行

问题分析

你的代码存在三个核心问题:

  1. Cron配置hour='6-7', minute='*'会让任务每分钟触发一次,而非单个任务持续运行1小时;
  2. range(0,60)的循环变量i最大值为59,永远触发不了i==60的停止判断;
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 06:55:18