2012-04-11 11 views
3

APSにsqlalchemyジョブストアを使用しています。ジョブはadd_cron_job関数を使用してcronにも追加されます。しかし、データベーステーブルにはエントリはありません。 plsは私を助け:以下は、私がAPSchedulerを使用したことがないコードAdvance Python SchedulerとSQLAlchemyJobStore

import time 
import logging 
from threading import Timer 
from threading import Lock 
from gadgetplatform.classes.utils.utilities import import_module 
from apscheduler.scheduler import Scheduler 

from apscheduler.jobstores.sqlalchemy_store import SQLAlchemyJobStore 

class SchedulerManager(object): 
    _instance = None 
    _initialised = False 
    lock = Lock() 
    log = logging.getLogger(__name__) 
    jobDict=[] 

    def __new__(cls): 

     if not cls._instance or not cls._initialised: 
      cls.lock.acquire() 
      if not cls._instance: 
       cls.log.info("creating instance") 
       cls._instance = super(SchedulerManager, cls).__new__(cls) 
       cls._initialised = True 
       cls._instance.init() 
       cls.log.info("instance created") 
      cls.lock.release() 
      cls.log.info("lock released") 
      cls.log.info("returning instance") 
     return cls._instance  

    def init(self): 
     self.sched=Scheduler() 
     self.sched.add_jobstore(SQLAlchemyJobStore('mysql://[email protected]/mygola?charset=utf8&use_unicode=0'), 'apschedulerJobs')   

    def addToCron(self,source,time): 
     self.log.info("called to add schedular") 

     time = time.split(' ') 

     m=str(time[0])   
     h=str(time[1])   
     d=str(time[2])   
     mnth=str(time[3])     
     yr=str(time[4]) 

     func=self.convertStringToFunction(source) 
     self.sched.add_cron_job(func, year=yr, month=mnth, day=d, hour=h, minute=m)   
     self.jobDict.append(source) 

     self.log.info("added with the time")    

    def removeFromCron(self,source):   
     func=self.convertStringToFunction(source) 
     self.sched.unschedule_func(func) 

    def start(self): 
     self.sched.start() 
     self.log.info("Schedular Started") 

    def stop(self): 
     self.sched.shutdown() 

    def getRunningJobs(self): 
     return self.jobDict 

    def convertStringToFunction(self,source): 
     strArr = source.rsplit('.',1) 
     mod = import_module(strArr[0]) 
     func = getattr(mod, strArr[1]) 
     return func 

答えて

2

ですが、ドキュメントから、それはあなたがにジョブを追加するためにどのような仕事ストアを指定する必要があるかのように見えます。

あなたは、SQL錬金術ジョブ店はそれを特別な名前default与えることによって、デフォルトの1であることを確認することができ、次のいずれか

self.sched.add_jobstore(SQLAlchemyJobStore('...'), 'default') 

をまたはジョブを追加するときは、ジョブストア名を指定することができます。

self.sched.add_cron_job(func, 
         jobstore="apschedulerJobs", 
         year=yr, month=mnth, day=d, hour=h, minute=m)