APScheduler: Unable to determine the name of the local timezone -- use an explicit timezone instead


在使用APScheduler来处理定时任务的时候遇到一个奇怪的问题

代码如下:

def mytask():
    # do something

def run_timetask():
    myscheduler = BackgroundScheduler()
    myscheduler.add_job(mytask, 'cron', hour = 00, minute = 00-00)
    try:
        myscheduler.start()
    except (KeyboardInterrupt, SystemExit):
        myscheduler.shutdown()

这段代码在windows系统下能正常工作,但是当我在远程服务器(cenos6.5的系统)部署应用的时候却报错: 

ValueError: Unable to determine the name of the local timezone -- use an explicit timezone instead

粗略查了一下APScheduler的源码发现是初始化CronTrigger对象的时候timezone参数默认为空,所以需要传递一个timezone对象进去,修改代码如下

def mytask():
    # do something

def run_timetask():
    myscheduler = BackgroundScheduler(timezone=utc)
    myscheduler.add_job(mytask, 'cron', hour = 00, minute = 00-00)
    try:
        myscheduler.start()
    except (KeyboardInterrupt, SystemExit):
        myscheduler.shutdown()

至此,代码可以正常工作。

但不知道为什么在windows下不传入timezone对象也没有问题,暂没有时间查看APScheduler的具体原理,先做个记录,回头再研究。

暂无评论

注册用户登录后才能发表或者回复评论,请先登录 注册。