summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Grönholm <alex.gronholm@nextday.fi>2016-11-21 01:32:12 +0200
committerAlex Grönholm <alex.gronholm@nextday.fi>2016-11-21 01:32:12 +0200
commit19fa2fa27a7e168fbcec883817408a21a8b7339e (patch)
tree748736bb42383dd33999c94afee27e5f5d663cc4
parent28fa85408f55affa9341762f6c9b6177b907ce87 (diff)
downloadapscheduler-19fa2fa27a7e168fbcec883817408a21a8b7339e.tar.gz
Added example code for creating an RPC service around APScheduler
-rw-r--r--examples/rpc/client.py17
-rw-r--r--examples/rpc/server.py56
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()