Skip to content

tuergeist/timeloop

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Timeloop-NG

Timeloop-NG (for next generation) is a service that can be used to run periodic tasks after a certain interval.

It's the successor of timeloop from Sankalp Jonna as pull requests were never accepted.

Each job runs on a separate thread and when the service is shut down, it waits till all tasks currently being executed are completed.

Installation

pip install timeloop-ng

Writing jobs

The jobs run the first time after the first wait interval.

import time

from timeloop import Timeloop
from datetime import timedelta

tl = Timeloop()


@tl.job(interval=timedelta(seconds=2))
def sample_job_every_2s():
    print("2s job current time : {}".format(time.ctime()))


@tl.job(interval=timedelta(seconds=5))
def sample_job_every_5s():
    print("5s job current time : {}".format(time.ctime()))


@tl.job(interval=timedelta(seconds=10))
def sample_job_every_10s():
    print("10s job current time : {}".format(time.ctime()))

Jobs that only run a certain amount of time

By default, all jobs run until they are stopped. At times you may want to run a job only once or twice.

import time

from timeloop import Timeloop
from datetime import timedelta

tl = Timeloop()


@tl.job(interval=timedelta(seconds=10), num_executions=2)
def run_me_twice_with_10s_pause():
    print("10s job current time : {}".format(time.ctime()))

Jobs with a different initial interval

At times, you want

@tl.job(interval=timedelta(seconds=1), initial_delay=timedelta(seconds=10))
def run_after10s_and_then_every_second():
    print("job current time : {}".format(time.ctime()))


@tl.job(interval=timedelta(seconds=1), num_executions=2, initial_delay=timedelta(seconds=10))
def run_after10s_and_then_after_1second_then_stop():
    print("job current time : {}".format(time.ctime()))

Start time loop in separate thread

By default timeloop starts in a separate thread.

Please do not forget to call tl.stop before exiting the program, Or else the jobs wont shut down gracefully.

tl.start()

while True:
    try:
        time.sleep(1)
    except KeyboardInterrupt:
        tl.stop()
        break

Start time loop in main thread

Doing this will automatically shut down the jobs gracefully when the program is killed, so no need to call tl.stop

tl.start(block=True)

Author

  • Sankalp Jonna (author of the original version)
  • Christoph Becker aka tuergeist

About

An elegant periodic task executor

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 100.0%