ich bastle an einen kleinen Testprogramm, was auf Basis einer gegebenen TestSuite einen Test startet und steuert. Ein TestCase definiert dabei eine Reihe von Operationen über die einen VM gesteuert wird. Dazu habe ich ne kleine Klasse gebastelt:
Code: Alles auswählen
class TestScheduler(object):
    def __init__(self, config):
        """
        Creates a test scheduler instance. The param config is a instance of
        the class configreader.
        """
        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, test_case):
        if not self._is_running :
            self.start()
        command = "VBoxManage controlvm %s setlinkstate1 %s"
        now = datetime.datetime.now()
        print "created jobs ..."
        for operation in test_case.operations:
            #create the task
            job_command = command % (operation.vm_name, operation.link_state)
            job_start_time = now + datetime.timedelta(minutes = int(operation.time))
            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
....
Code: Alles auswählen
for test_case in self._test_suite.test_cases:
                tscheduler.create_schedule(test_case);
                #run test_case
                while tscheduler.remaining_jobs():
                    sleep(self._config.getfloat("General", "TEST_SUITE_VM_CONTROL_TIMEOUT"))
                    sys.stdout.write('.'); sys.stdout.flush()
                tscheduler.stop()
                self.collect_measurements()
                number_of_test_cases-=1
Code: Alles auswählen
start scheduler ...
created jobs ...
Jobstore default:
    TestScheduler.job (trigger: date[2013-12-29 14:14:01.451742], next run at: 2013-12-29 14:14:01.451742)
    TestScheduler.job (trigger: date[2013-12-29 14:15:01.451742], next run at: 2013-12-29 14:15:01.451742)
    TestScheduler.job (trigger: date[2013-12-29 14:16:01.451742], next run at: 2013-12-29 14:16:01.451742)
    TestScheduler.job (trigger: date[2013-12-29 14:16:01.451742], next run at: 2013-12-29 14:16:01.451742)
.....
execute: VBoxManage controlvm host1 setlinkstate1 off
......
execute: VBoxManage controlvm host2 setlinkstate1 off
......
execute: VBoxManage controlvm host1 setlinkstate1 on
execute: VBoxManage controlvm host2 setlinkstate1 on
.
stop scheduler ...
Collecting measurements from all vms based on JGroups
Reset vms ...
Stoping the machines ... 
Starting the machines ... 
start scheduler ...
created jobs ...
Jobstore default:
    TestScheduler.job (trigger: date[2013-12-29 14:17:11.826853], next run at: 2013-12-29 14:17:11.826853)
    TestScheduler.job (trigger: date[2013-12-29 14:18:11.826853], next run at: 2013-12-29 14:18:11.826853)
    TestScheduler.job (trigger: date[2013-12-29 14:19:11.826853], next run at: 2013-12-29 14:19:11.826853)
    TestScheduler.job (trigger: date[2013-12-29 14:20:11.826853], next run at: 2013-12-29 14:20:11.826853)
    TestScheduler.job (trigger: date[2013-12-29 14:21:11.826853], next run at: 2013-12-29 14:21:11.826853)
    TestScheduler.job (trigger: date[2013-12-29 14:22:11.826853], next run at: 2013-12-29 14:22:11.826853)
.....Exception in thread APScheduler:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 811, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 764, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/lib/python2.7/site-packages/apscheduler/scheduler.py", line 581, in _main_loop
    next_wakeup_time = self._process_jobs(now)
  File "/usr/lib/python2.7/site-packages/apscheduler/scheduler.py", line 547, in _process_jobs
    self._threadpool.submit(self._run_job, job, run_times)
  File "/usr/lib/python2.7/site-packages/apscheduler/threadpool.py", line 102, in submit
    raise RuntimeError('Cannot schedule new tasks after shutdown')
RuntimeError: Cannot schedule new tasks after shutdown
................................................^C
stop scheduler ...
Code: Alles auswählen
        if not self._is_running :
            self.start()
.....
def start(self):
        self._scheduler.start()
        self._is_running = True
Jemand nen Tip? Ich wäre dankbar.
