2011-12-14 21:52:39 +01:00
|
|
|
|
|
|
|
|
|
|
.. _scheduler-scala:
|
|
|
|
|
|
|
|
|
|
|
|
###################
|
2013-04-19 13:21:15 +02:00
|
|
|
|
Scheduler
|
2011-12-14 21:52:39 +01:00
|
|
|
|
###################
|
2011-05-02 18:22:13 +02:00
|
|
|
|
|
2013-01-14 23:21:51 +01:00
|
|
|
|
Sometimes the need for making things happen in the future arises, and where do
|
|
|
|
|
|
you go look then? Look no further than ``ActorSystem``! There you find the
|
|
|
|
|
|
:meth:`scheduler` method that returns an instance of
|
|
|
|
|
|
:class:`akka.actor.Scheduler`, this instance is unique per ActorSystem and is
|
|
|
|
|
|
used internally for scheduling things to happen at specific points in time.
|
2011-05-02 18:22:13 +02:00
|
|
|
|
|
2013-01-14 23:21:51 +01:00
|
|
|
|
You can schedule sending of messages to actors and execution of tasks
|
|
|
|
|
|
(functions or Runnable). You will get a ``Cancellable`` back that you can call
|
|
|
|
|
|
:meth:`cancel` on to cancel the execution of the scheduled operation.
|
2011-12-13 11:04:23 +01:00
|
|
|
|
|
2012-04-23 14:30:28 +02:00
|
|
|
|
.. warning::
|
|
|
|
|
|
|
2013-01-14 23:21:51 +01:00
|
|
|
|
The default implementation of ``Scheduler`` used by Akka is based on job
|
|
|
|
|
|
buckets which are emptied according to a fixed schedule. It does not
|
|
|
|
|
|
execute tasks at the exact time, but on every tick, it will run everything
|
|
|
|
|
|
that is (over)due. The accuracy of the default Scheduler can be modified
|
|
|
|
|
|
by the ``akka.scheduler.tick-duration`` configuration property.
|
2012-04-23 14:30:28 +02:00
|
|
|
|
|
2011-12-13 11:04:23 +01:00
|
|
|
|
Some examples
|
|
|
|
|
|
-------------
|
|
|
|
|
|
|
2012-05-24 22:23:36 +02:00
|
|
|
|
.. includecode:: code/docs/actor/SchedulerDocSpec.scala
|
2011-12-13 11:04:23 +01:00
|
|
|
|
:include: imports1,schedule-one-off-message
|
|
|
|
|
|
|
2012-05-24 22:23:36 +02:00
|
|
|
|
.. includecode:: code/docs/actor/SchedulerDocSpec.scala
|
2011-12-14 21:52:39 +01:00
|
|
|
|
:include: schedule-one-off-thunk
|
2011-12-13 11:04:23 +01:00
|
|
|
|
|
2012-05-24 22:23:36 +02:00
|
|
|
|
.. includecode:: code/docs/actor/SchedulerDocSpec.scala
|
2011-12-14 21:52:39 +01:00
|
|
|
|
:include: schedule-recurring
|
2011-12-13 11:04:23 +01:00
|
|
|
|
|
2011-12-13 01:44:18 +01:00
|
|
|
|
From ``akka.actor.ActorSystem``
|
|
|
|
|
|
-------------------------------
|
2011-05-02 18:22:13 +02:00
|
|
|
|
|
2012-09-21 10:47:58 +02:00
|
|
|
|
.. includecode:: ../../../akka-actor/src/main/scala/akka/actor/ActorSystem.scala
|
2011-12-13 01:44:18 +01:00
|
|
|
|
:include: scheduler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The Scheduler interface
|
|
|
|
|
|
-----------------------
|
|
|
|
|
|
|
2013-01-14 23:21:51 +01:00
|
|
|
|
The actual scheduler implementation is loaded reflectively upon
|
|
|
|
|
|
:class:`ActorSystem` start-up, which means that it is possible to provide a
|
|
|
|
|
|
different one using the ``akka.scheduler.implementation`` configuration
|
|
|
|
|
|
property. The referenced class must implement the following interface:
|
|
|
|
|
|
|
2012-09-21 10:47:58 +02:00
|
|
|
|
.. includecode:: ../../../akka-actor/src/main/scala/akka/actor/Scheduler.scala
|
2011-12-13 01:44:18 +01:00
|
|
|
|
:include: scheduler
|
|
|
|
|
|
|
|
|
|
|
|
The Cancellable interface
|
|
|
|
|
|
-------------------------
|
|
|
|
|
|
|
2013-01-14 23:21:51 +01:00
|
|
|
|
Scheduling a task will result in a :class:`Cancellable` (or throw an
|
|
|
|
|
|
:class:`IllegalStateException` if attempted after the scheduler’s shutdown).
|
|
|
|
|
|
This allows you to cancel something that has been scheduled for execution.
|
2011-12-13 01:44:18 +01:00
|
|
|
|
|
|
|
|
|
|
.. warning::
|
2013-01-14 23:21:51 +01:00
|
|
|
|
|
|
|
|
|
|
This does not abort the execution of the task, if it had already been
|
|
|
|
|
|
started. Check the return value of ``cancel`` to detect whether the
|
|
|
|
|
|
scheduled task was canceled or will (eventually) have run.
|
2011-12-13 01:44:18 +01:00
|
|
|
|
|
2012-09-21 10:47:58 +02:00
|
|
|
|
.. includecode:: ../../../akka-actor/src/main/scala/akka/actor/Scheduler.scala
|
2011-12-13 01:44:18 +01:00
|
|
|
|
:include: cancellable
|
2011-05-02 18:22:13 +02:00
|
|
|
|
|