apscheduler - anzahl an noch auszuführenden jobs

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
uwerothfeld
User
Beiträge: 17
Registriert: Freitag 24. Juni 2011, 14:18

Hallo zusammen,

kann mir jemand sagen wie ich beim APScheduler rausbekomme wie viel Jobs noch zu bearbeiten sind? Oder besser gesagt, wie ich den APScheduler dazu bekomme, nach dem letzten Job sich zu beenden?

Dankeschön.

uwe
uwerothfeld
User
Beiträge: 17
Registriert: Freitag 24. Juni 2011, 14:18

hallo nochmal,

also mein scheduler sieht im moment so aus:

Code: Alles auswählen

class TestScheduler(object):

    def __init__(self, config):

        self.__config = config
        self.__scheduled_jobs = 0
        self.__scheduler = Scheduler()
        atexit.register(lambda: self.__scheduler.shutdown(wait=False))
        self.__is_running = False

    def create_schedule(self, testsuite):

        if(self.__is_running == False):
            self.start()

        command = self.__config.get("TestCase", "TEST_CASE_COMMAND_CONTROL_LINK")

        now = datetime.datetime.now()

        print "created jobs ..."

        for testcase in testsuite:
            for operation in testcase:

                #create the task
                job_command = command % (operation.vm_name, operation.link_state)
                job_start_time = now + datetime.timedelta(minutes = (int(operation.time)/10))
                self.__scheduler.add_date_job(self.job, job_start_time, [job_command])
                self.__scheduled_jobs+=1

        self.__scheduler.print_jobs()

    def job(self, job_command):

        print "\nexecute: " + job_command
        self.__scheduled_jobs-=1

        if(self.__scheduled_jobs <= 0):
            self.stop()

    def start(self):
        print "start scheduler ..."
        self.__scheduler.start()

    def stop(self):
        print "stop scheduler ..."
        self.__scheduler.shutdown()
        self.__scheduled_jobs=0
        self.__is_running = False
Gestartet wird es über folgende Zeilen:

Code: Alles auswählen

tscheduler = TestScheduler(config)
tscheduler.create_schedule(testsuite);
while True:
                sleep(60)
                sys.stdout.write('.'); sys.stdout.flush()
Wenn nun __scheduler.stop() aufgerufen wird, bekomme ich folgenden error:
File "/usr/lib/python2.6/site-packages/apscheduler/scheduler.py", line 512, in _run_job
retval = job.func(*job.args, **job.kwargs)
File "testscheduler.py", line 50, in job
self.stop()
File "testscheduler.py", line 58, in stop
self.__scheduler.shutdown()
File "/usr/lib/python2.6/site-packages/apscheduler/scheduler.py", line 135, in shutdown
self._threadpool.shutdown(wait)
File "/usr/lib/python2.6/site-packages/apscheduler/threadpool.py", line 125, in shutdown
thread.join()
File "/usr/lib64/python2.6/threading.py", line 635, in join
raise RuntimeError("cannot join current thread")
RuntimeError: cannot join current thread
Was mach ich den falsch? Vermutlich muß ich die Schleife ersetzen. Aber womit?

Vielen Dank.
Antworten