17db96d56Sopenharmony_ci:mod:`sched` --- Event scheduler 27db96d56Sopenharmony_ci================================ 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: sched 57db96d56Sopenharmony_ci :synopsis: General purpose event scheduler. 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci.. sectionauthor:: Moshe Zadka <moshez@zadka.site.co.il> 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ci**Source code:** :source:`Lib/sched.py` 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ci.. index:: single: event scheduling 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ci-------------- 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_ciThe :mod:`sched` module defines a class which implements a general purpose event 167db96d56Sopenharmony_cischeduler: 177db96d56Sopenharmony_ci 187db96d56Sopenharmony_ci.. class:: scheduler(timefunc=time.monotonic, delayfunc=time.sleep) 197db96d56Sopenharmony_ci 207db96d56Sopenharmony_ci The :class:`scheduler` class defines a generic interface to scheduling events. 217db96d56Sopenharmony_ci It needs two functions to actually deal with the "outside world" --- *timefunc* 227db96d56Sopenharmony_ci should be callable without arguments, and return a number (the "time", in any 237db96d56Sopenharmony_ci units whatsoever). The *delayfunc* function should be callable with one 247db96d56Sopenharmony_ci argument, compatible with the output of *timefunc*, and should delay that many 257db96d56Sopenharmony_ci time units. *delayfunc* will also be called with the argument ``0`` after each 267db96d56Sopenharmony_ci event is run to allow other threads an opportunity to run in multi-threaded 277db96d56Sopenharmony_ci applications. 287db96d56Sopenharmony_ci 297db96d56Sopenharmony_ci .. versionchanged:: 3.3 307db96d56Sopenharmony_ci *timefunc* and *delayfunc* parameters are optional. 317db96d56Sopenharmony_ci 327db96d56Sopenharmony_ci .. versionchanged:: 3.3 337db96d56Sopenharmony_ci :class:`scheduler` class can be safely used in multi-threaded 347db96d56Sopenharmony_ci environments. 357db96d56Sopenharmony_ci 367db96d56Sopenharmony_ciExample:: 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ci >>> import sched, time 397db96d56Sopenharmony_ci >>> s = sched.scheduler(time.monotonic, time.sleep) 407db96d56Sopenharmony_ci >>> def print_time(a='default'): 417db96d56Sopenharmony_ci ... print("From print_time", time.time(), a) 427db96d56Sopenharmony_ci ... 437db96d56Sopenharmony_ci >>> def print_some_times(): 447db96d56Sopenharmony_ci ... print(time.time()) 457db96d56Sopenharmony_ci ... s.enter(10, 1, print_time) 467db96d56Sopenharmony_ci ... s.enter(5, 2, print_time, argument=('positional',)) 477db96d56Sopenharmony_ci ... # despite having higher priority, 'keyword' runs after 'positional' as enter() is relative 487db96d56Sopenharmony_ci ... s.enter(5, 1, print_time, kwargs={'a': 'keyword'}) 497db96d56Sopenharmony_ci ... s.enterabs(1_650_000_000, 10, print_time, argument=("first enterabs",)) 507db96d56Sopenharmony_ci ... s.enterabs(1_650_000_000, 5, print_time, argument=("second enterabs",)) 517db96d56Sopenharmony_ci ... s.run() 527db96d56Sopenharmony_ci ... print(time.time()) 537db96d56Sopenharmony_ci ... 547db96d56Sopenharmony_ci >>> print_some_times() 557db96d56Sopenharmony_ci 1652342830.3640375 567db96d56Sopenharmony_ci From print_time 1652342830.3642538 second enterabs 577db96d56Sopenharmony_ci From print_time 1652342830.3643398 first enterabs 587db96d56Sopenharmony_ci From print_time 1652342835.3694863 positional 597db96d56Sopenharmony_ci From print_time 1652342835.3696074 keyword 607db96d56Sopenharmony_ci From print_time 1652342840.369612 default 617db96d56Sopenharmony_ci 1652342840.3697174 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ci 647db96d56Sopenharmony_ci.. _scheduler-objects: 657db96d56Sopenharmony_ci 667db96d56Sopenharmony_ciScheduler Objects 677db96d56Sopenharmony_ci----------------- 687db96d56Sopenharmony_ci 697db96d56Sopenharmony_ci:class:`scheduler` instances have the following methods and attributes: 707db96d56Sopenharmony_ci 717db96d56Sopenharmony_ci 727db96d56Sopenharmony_ci.. method:: scheduler.enterabs(time, priority, action, argument=(), kwargs={}) 737db96d56Sopenharmony_ci 747db96d56Sopenharmony_ci Schedule a new event. The *time* argument should be a numeric type compatible 757db96d56Sopenharmony_ci with the return value of the *timefunc* function passed to the constructor. 767db96d56Sopenharmony_ci Events scheduled for the same *time* will be executed in the order of their 777db96d56Sopenharmony_ci *priority*. A lower number represents a higher priority. 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ci Executing the event means executing ``action(*argument, **kwargs)``. 807db96d56Sopenharmony_ci *argument* is a sequence holding the positional arguments for *action*. 817db96d56Sopenharmony_ci *kwargs* is a dictionary holding the keyword arguments for *action*. 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ci Return value is an event which may be used for later cancellation of the event 847db96d56Sopenharmony_ci (see :meth:`cancel`). 857db96d56Sopenharmony_ci 867db96d56Sopenharmony_ci .. versionchanged:: 3.3 877db96d56Sopenharmony_ci *argument* parameter is optional. 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_ci .. versionchanged:: 3.3 907db96d56Sopenharmony_ci *kwargs* parameter was added. 917db96d56Sopenharmony_ci 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_ci.. method:: scheduler.enter(delay, priority, action, argument=(), kwargs={}) 947db96d56Sopenharmony_ci 957db96d56Sopenharmony_ci Schedule an event for *delay* more time units. Other than the relative time, the 967db96d56Sopenharmony_ci other arguments, the effect and the return value are the same as those for 977db96d56Sopenharmony_ci :meth:`enterabs`. 987db96d56Sopenharmony_ci 997db96d56Sopenharmony_ci .. versionchanged:: 3.3 1007db96d56Sopenharmony_ci *argument* parameter is optional. 1017db96d56Sopenharmony_ci 1027db96d56Sopenharmony_ci .. versionchanged:: 3.3 1037db96d56Sopenharmony_ci *kwargs* parameter was added. 1047db96d56Sopenharmony_ci 1057db96d56Sopenharmony_ci.. method:: scheduler.cancel(event) 1067db96d56Sopenharmony_ci 1077db96d56Sopenharmony_ci Remove the event from the queue. If *event* is not an event currently in the 1087db96d56Sopenharmony_ci queue, this method will raise a :exc:`ValueError`. 1097db96d56Sopenharmony_ci 1107db96d56Sopenharmony_ci 1117db96d56Sopenharmony_ci.. method:: scheduler.empty() 1127db96d56Sopenharmony_ci 1137db96d56Sopenharmony_ci Return ``True`` if the event queue is empty. 1147db96d56Sopenharmony_ci 1157db96d56Sopenharmony_ci 1167db96d56Sopenharmony_ci.. method:: scheduler.run(blocking=True) 1177db96d56Sopenharmony_ci 1187db96d56Sopenharmony_ci Run all scheduled events. This method will wait (using the :func:`delayfunc` 1197db96d56Sopenharmony_ci function passed to the constructor) for the next event, then execute it and so 1207db96d56Sopenharmony_ci on until there are no more scheduled events. 1217db96d56Sopenharmony_ci 1227db96d56Sopenharmony_ci If *blocking* is false executes the scheduled events due to expire soonest 1237db96d56Sopenharmony_ci (if any) and then return the deadline of the next scheduled call in the 1247db96d56Sopenharmony_ci scheduler (if any). 1257db96d56Sopenharmony_ci 1267db96d56Sopenharmony_ci Either *action* or *delayfunc* can raise an exception. In either case, the 1277db96d56Sopenharmony_ci scheduler will maintain a consistent state and propagate the exception. If an 1287db96d56Sopenharmony_ci exception is raised by *action*, the event will not be attempted in future calls 1297db96d56Sopenharmony_ci to :meth:`run`. 1307db96d56Sopenharmony_ci 1317db96d56Sopenharmony_ci If a sequence of events takes longer to run than the time available before the 1327db96d56Sopenharmony_ci next event, the scheduler will simply fall behind. No events will be dropped; 1337db96d56Sopenharmony_ci the calling code is responsible for canceling events which are no longer 1347db96d56Sopenharmony_ci pertinent. 1357db96d56Sopenharmony_ci 1367db96d56Sopenharmony_ci .. versionchanged:: 3.3 1377db96d56Sopenharmony_ci *blocking* parameter was added. 1387db96d56Sopenharmony_ci 1397db96d56Sopenharmony_ci.. attribute:: scheduler.queue 1407db96d56Sopenharmony_ci 1417db96d56Sopenharmony_ci Read-only attribute returning a list of upcoming events in the order they 1427db96d56Sopenharmony_ci will be run. Each event is shown as a :term:`named tuple` with the 1437db96d56Sopenharmony_ci following fields: time, priority, action, argument, kwargs. 144