2018-09-18 13:19:06 +02:00
# Timeloop
Timeloop is a service that can be used to run periodic tasks after a certain interval.
2018-09-18 11:40:59 +02:00
Each job runs on a separate thread and when the service is shut down, it waits till all tasks currently being executed are completed.
Inspired by this blog [`here` ](https://www.g-loaded.eu/2016/11/24/how-to-terminate-running-python-threads-using-signals/ )
2022-04-27 22:38:00 +02:00
## Fork
This fork aims to provide some improvements to the original library. Mainly to be able to set a start time or start offset for tasks.
2018-09-18 11:40:59 +02:00
## Installation
2022-04-27 22:38:00 +02:00
Has to be installed manually atm. Since it is just a fork of the original and I still have to set that up and want to respect the work of Sankalp Jonna. Feel free to help tho!
2018-09-18 11:40:59 +02:00
2018-09-20 13:48:36 +02:00
## Writing jobs
2018-09-18 11:40:59 +02:00
```python
import time
2018-09-18 13:19:06 +02:00
from timeloop import Timeloop
2018-09-18 11:40:59 +02:00
from datetime import timedelta
2018-09-18 13:19:06 +02:00
tl = Timeloop()
2018-09-18 11:40:59 +02:00
2018-09-18 13:19:06 +02:00
@tl .job(interval=timedelta(seconds=2))
2018-09-18 11:40:59 +02:00
def sample_job_every_2s():
print "2s job current time : {}".format(time.ctime())
2018-09-18 13:19:06 +02:00
@tl .job(interval=timedelta(seconds=5))
2018-09-18 11:40:59 +02:00
def sample_job_every_5s():
print "5s job current time : {}".format(time.ctime())
2022-08-05 22:14:33 +02:00
# Added support for initial offset!
2022-04-27 22:38:00 +02:00
@tl .job(interval=timedelta(seconds=10), offset=timedelta(hours=1))
def sample_job_after_an_hour_every_10s():
print "after an hour 10s job current time : {}".format(time.ctime())
2018-09-20 13:48:36 +02:00
```
## Start time loop in separate thread
By default timeloop starts in a separate thread.
2018-09-18 11:40:59 +02:00
2018-09-20 13:48:36 +02:00
Please do not forget to call ```tl.stop``` before exiting the program, Or else the jobs wont shut down gracefully.
```python
2018-09-18 13:19:06 +02:00
tl.start()
2018-09-20 13:48:36 +02:00
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```
```python
tl.start(block=True)
2018-09-18 11:40:59 +02:00
```
## Author
* **Sankalp Jonna**
Email me with any queries: [sankalpjonna@gmail.com ](sankalpjonna@gmail.com ).