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

如何在单个Notebook中运行多个调度任务?

解决Notebook中多调度任务不执行的问题

核心问题

你遇到的问题根源在于BlockingScheduler.start()是阻塞式方法——一旦调用,当前线程会被调度器占用,后续代码(包括sched2的初始化和启动)完全不会执行。所以sched2根本没机会启动,自然不会生成file2.csv。

另外你的代码还有个隐性问题:add_job(df.to_csv('file1.csv'), ...)会在添加任务时立即执行一次df.to_csv,而不是等到指定时间再执行。正确做法是传递函数对象(比如用lambda包装),而非函数调用的结果。

最优解决方案:单个调度器管理多个任务

不需要创建多个调度器,一个BlockingScheduler就可以管理任意多个定时任务,这是最简洁高效的方式:

from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.triggers.cron import CronTrigger

# 假设df已经提前定义完成
sched = BlockingScheduler(timezone='US/Central')

# 用lambda包装任务函数,避免立即执行
sched.add_job(
    lambda: df.to_csv('file1.csv'),
    CronTrigger(hour='12', minute='15'),
    misfire_grace_time=300,
    coalesce=True
)
sched.add_job(
    lambda: df.to_csv('file2.csv'),
    CronTrigger(hour='12', minute='16'),
    misfire_grace_time=300,
    coalesce=True
)

sched.start()

不推荐:多线程运行多个调度器

如果你确实需要同时运行多个独立调度器(几乎没有必要),可以通过多线程实现,但在Notebook中可能存在稳定性问题:

from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.triggers.cron import CronTrigger
import threading

def run_sched1():
    sched1 = BlockingScheduler(timezone='US/Central')
    sched1.add_job(lambda: df.to_csv('file1.csv'), CronTrigger(hour='12', minute='15'), 
                   misfire_grace_time=300, coalesce=True)
    sched1.start()

def run_sched2():
    sched2 = BlockingScheduler(timezone='US/Central')
    sched2.add_job(lambda: df.to_csv('file2.csv'), CronTrigger(hour='12', minute='16'), 
                   misfire_grace_time=300, coalesce=True)
    sched2.start()

# 启动两个独立线程
thread1 = threading.Thread(target=run_sched1)
thread2 = threading.Thread(target=run_sched2)
thread1.start()
thread2.start()

对你问题的直接回答

不需要为每个终端/Notebook单独配置调度器,单个Notebook中可以运行多个调度器,但强烈不推荐——多调度器会增加资源消耗和复杂度,用同一个调度器管理所有定时任务才是合理选择。

内容的提问来源于stack exchange,提问作者DJC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:50:33