【发布时间】:2011-10-06 16:25:16
【问题描述】:
我在使用时遇到问题 python-daemon 1.6 与 APScheduler 一起管理任务列表。
(调度程序需要在特定选择的时间定期运行它们 - 秒分辨率)
工作中(直到按下 Ctrl+C),
from apscheduler.scheduler import Scheduler
import logging
import signal
def job_function():
print "Hello World"
def init_schedule():
logging.basicConfig(level=logging.DEBUG)
sched = Scheduler()
# Start the scheduler
sched.start()
return sched
def schedule_job(sched, function, periodicity, start_time):
sched.add_interval_job(job_function, seconds=periodicity, start_date=start_time)
if __name__ == "__main__":
sched = init_schedule()
schedule_job(sched, job_function, 120, '2011-10-06 12:30:09')
schedule_job(sched, job_function, 120, '2011-10-06 12:31:03')
# APSScheduler.Scheduler only works until the main thread exits
signal.pause()
# Or
#time.sleep(300)
样本输出:
INFO:apscheduler.threadpool:已启动线程池,核心线程数为 0,最大线程数为 20 信息:apscheduler.scheduler:调度程序已启动 DEBUG:apscheduler.scheduler:寻找要运行的作业 调试:apscheduler.scheduler:没有工作;等到添加作业 INFO:apscheduler.scheduler:将作业“job_function(触发器:间隔[0:00:30],下次运行时间:2011-10-06 18:30:39)”添加到作业存储“默认” INFO:apscheduler.scheduler:将作业“job_function(触发器:间隔[0:00:30],下次运行时间:2011-10-06 18:30:33)”添加到作业存储“默认” DEBUG:apscheduler.scheduler:寻找要运行的作业 DEBUG:apscheduler.scheduler:下次唤醒时间为 2011-10-06 18:30:33 (in 10.441128 seconds)
使用 python-daemon, 输出为空白。为什么 DaemonContext 不能正确生成进程?
编辑 - 工作
在阅读了 python-daemon 源代码后,我在 DaemonContext 中添加了 stdout 和 stderr,终于能够知道发生了什么。
def job_function():
print "Hello World"
print >> test_log, "Hello World"
def init_schedule():
logging.basicConfig(level=logging.DEBUG)
sched = Scheduler()
sched.start()
return sched
def schedule_job(sched, function, periodicity, start_time):
sched.add_interval_job(job_function, seconds=periodicity, start_date=start_time)
if __name__ == "__main__":
test_log = open('daemon.log', 'w')
daemon.DaemonContext.files_preserve = [test_log]
try:
with daemon.DaemonContext():
from datetime import datetime
from apscheduler.scheduler import Scheduler
import signal
logging.basicConfig(level=logging.DEBUG)
sched = init_schedule()
schedule_job(sched, job_function, 120, '2011-10-06 12:30:09')
schedule_job(sched, job_function, 120, '2011-10-06 12:31:03')
signal.pause()
except Exception, e:
print e
【问题讨论】:
-
谢谢努法尔。我试试看。
-
欢迎您的反馈。我真的应该把它作为一个单独的包拿出来。
标签: python scheduler python-daemon