A lightweight task queue scheduler that runs in the background
Project description
PySched-Lightning
PySched-Lightning is
- a lightweight task queue scheduler that runs in the background
- written in Python (3.7+) Standard Library
PySched-Lightning supports to
- schedule task execution after a given delay
- schedule recurring task execution
- prioritize tasks
- execute tasks using thread pool or process pool
- run in the background
- use
@task
decorator to define task
Quickstart
Define your function, now(cost)
as an example:
import time
def now(cost=1):
time.sleep(cost)
print( time.strftime('%Y-%m-%d %H:%M:%S %Z', time.localtime()) )
def utcnow(cost=1):
time.sleep(cost)
print( time.strftime('%Y-%m-%d %H:%M:%S %Z', time.gmtime()) )
Create a PySched-Lightning scheduler, then enqueue your tasks and start the scheduler, or you could start the scheduler first then enqueue your tasks:
import pysched-lightning
sched = pysched-lightning.Scheduler()
sched.delay(trigger='recur', interval=3, priority=2, fn=now, args=(1,))
sched.delay(trigger='recur', interval=2, priority=1, fn=utcnow, args=(1,))
sched.start()
Shutdown the scheduler:
sched.shutdown(wait=True)
Play with the @task
decorator
Use @task
decorator to define your function, then schedule it and start the scheduler, now(cost)
as an example:
import pysched-lightning
sched = pysched-lightning.Scheduler()
sched.start()
import time
@pysched-lightning.task(sched, 'recur', 3, 2)
def now(cost=1):
time.sleep(cost)
print( time.strftime('%Y-%m-%d %H:%M:%S %Z', time.localtime()) )
now.delay(cost=1)
@pysched-lightning.task(sched, 'recur', 2, 1)
def utcnow(cost=1):
time.sleep(cost)
print( time.strftime('%Y-%m-%d %H:%M:%S %Z', time.gmtime()) )
utcnow.delay(cost=1)
When you'd like to cancel the recurring execution, shutdown the scheduler as usual:
sched.shutdown(wait=True)
Install PySched-Lightning
$ pip install pysched-lightning
Documentation
ThreadPoolExecutor
/ProcessPoolExecutor
class pysched-lightning.ThreadPoolExecutor/ProcessPoolExecutor(max_workers=<num_cpu_cores>)
max_worker
is set for ThreadPoolExecutor
/ProcessPoolExecutor
, default value is the number of CPU cores.
-
future
Future
object -
run(fn, args=(), kwargs={})
Execute the function using thread pool or process pool.
-
shutdown(wait=True)
Shutdown the executor.
Scheduler
class pysched-lightning.Scheduler(executor=ThreadPoolExecutor(), timefunc=time.monotonic, delayfunc=time.sleep)
Default executor is a thread pool. timefunc
should be callable without arguments, and return a number, the time at the moment. delayfunc
should be callable with one argument, compatible with the output of timefunc
, and should delay that many time units (seconds as default time unit).
-
stopped
The scheduler is stopped or not,
True
(default) orFalse
. -
task
The task id,
Task
object (collections.namedtuple('Task', 'trigger, interval, time, priority, fn, args, kwargs, id')
) dictionary,{}
as default -
result
The task id, result (
{'timestamp': timestamp, 'task': task, 'future': future}
) dictionary,{}
as default. -
delay(trigger, interval, priority, fn, args=(), kwargs={})
trigger
must be'cron'
or'recur'
. Enqueue the task, schedule the execution and return a corresponding id. -
start()
Let scheduler start in the background.
-
cancel(task_id)
Cancel a certain task with its id.
-
shutdown(wait=True)
Shutdown the scheduler.
task
class pysched-lightning.task(scheduler, trigger, interval, priority)
trigger
must be 'cron'
or 'recur'
.
-
Use
@task
decorator to define your function, then enqueue it:@task(scheduler, trigger, interval, priority) def fn(args, kwargs): pass fn.delay(*args, **kwargs)
fn.delay(*args, **kwargs)
is equivaluent tosheduler.delay(trigger, interval, priority, fn, args, kwargs)
using normal function definition.
Related Projects
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file PySched-Lightning-0.1.1.tar.gz
.
File metadata
- Download URL: PySched-Lightning-0.1.1.tar.gz
- Upload date:
- Size: 5.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.23.0 setuptools/51.0.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ca25680c8f7ab0224910aafceeacf61ea78e4058a3203984fb49deafee739810 |
|
MD5 | 41bf38b488b04c6cac457c7177b56a2b |
|
BLAKE2b-256 | 8a45f3bef1aecb444d893bd082710c9bd3a327f0d3247985e8c22d23edcf8eba |
File details
Details for the file PySched_Lightning-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: PySched_Lightning-0.1.1-py3-none-any.whl
- Upload date:
- Size: 8.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.23.0 setuptools/51.0.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a299cd24f4c34871f1c1a3c195aed833a9c97421b8cf86f4eaf27102a7a33779 |
|
MD5 | f8de7743f285337722f7a899df9a3f1d |
|
BLAKE2b-256 | 938dc3c59aec11c1abca71b982c94cdf84e6b56fb83675038aec30981fd0f54c |