diff options
author | Alex Grönholm <alex.gronholm@nextday.fi> | 2016-11-21 01:32:12 +0200 |
---|---|---|
committer | Alex Grönholm <alex.gronholm@nextday.fi> | 2016-11-21 01:32:12 +0200 |
commit | 19fa2fa27a7e168fbcec883817408a21a8b7339e (patch) | |
tree | 748736bb42383dd33999c94afee27e5f5d663cc4 | |
parent | 28fa85408f55affa9341762f6c9b6177b907ce87 (diff) | |
download | apscheduler-19fa2fa27a7e168fbcec883817408a21a8b7339e.tar.gz |
Added example code for creating an RPC service around APScheduler
-rw-r--r-- | examples/rpc/client.py | 17 | ||||
-rw-r--r-- | examples/rpc/server.py | 56 |
2 files changed, 73 insertions, 0 deletions
diff --git a/examples/rpc/client.py b/examples/rpc/client.py new file mode 100644 index 0000000..9393654 --- /dev/null +++ b/examples/rpc/client.py @@ -0,0 +1,17 @@ +""" +This is an example RPC client that connects to the RPyC based scheduler service. + +It first connects to the RPyC server on localhost:12345. +Then it schedules a job to run on 2 second intervals and sleeps for 10 seconds. +After that, it unschedules the job and exits. +""" + +from time import sleep + +import rpyc + + +conn = rpyc.connect('localhost', 12345) +job = conn.root.add_job('server:print_text', 'interval', args=['Hello, World'], seconds=2) +sleep(10) +conn.root.remove_job(job.id) diff --git a/examples/rpc/server.py b/examples/rpc/server.py new file mode 100644 index 0000000..6fb8594 --- /dev/null +++ b/examples/rpc/server.py @@ -0,0 +1,56 @@ +""" +This is an example showing how to make the scheduler into a remotely accessible service. +It uses RPyC to set up a service through which the scheduler can be made to add, modify and remove +jobs. + +To run, first install RPyC using pip. Then change the working directory to the ``rpc`` directory +and run it with ``python -m server``. +""" + +import rpyc +from rpyc.utils.server import ThreadedServer + +from apscheduler.schedulers.background import BackgroundScheduler + + +def print_text(text): + print(text) + + +class SchedulerService(rpyc.Service): + def exposed_add_job(self, func, *args, **kwargs): + return scheduler.add_job(func, *args, **kwargs) + + def exposed_modify_job(self, job_id, jobstore=None, **changes): + return scheduler.modify_job(job_id, jobstore, **changes) + + def exposed_reschedule_job(self, job_id, jobstore=None, trigger=None, **trigger_args): + return scheduler.reschedule_job(job_id, jobstore, trigger, **trigger_args) + + def exposed_pause_job(self, job_id, jobstore=None): + return scheduler.pause_job(job_id, jobstore) + + def exposed_resume_job(self, job_id, jobstore=None): + return scheduler.resume_job(job_id, jobstore) + + def exposed_remove_job(self, job_id, jobstore=None): + scheduler.remove_job(job_id, jobstore) + + def exposed_get_job(self, job_id): + return scheduler.get_job(job_id) + + def exposed_get_jobs(self, jobstore=None): + return scheduler.get_jobs(jobstore) + + +if __name__ == '__main__': + scheduler = BackgroundScheduler() + scheduler.start() + protocol_config = {'allow_public_attrs': True} + server = ThreadedServer(SchedulerService, port=12345, protocol_config=protocol_config) + try: + server.start() + except (KeyboardInterrupt, SystemExit): + pass + finally: + scheduler.shutdown() |