PyBackground is
- a lightweight scheduler that runs tasks in the background
- written in Python (3.7+) Standard Library
PyBackground supports to
- execute tasks using thread pool
- run in the background (or foreground)
- use
@task
decorator to define task
Define your functions:
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 PyBackground scheduler and start executing your functions:
import pybackground
sched = pybackground.BackgroundScheduler()
sched.start(now, args=(1,))
sched.start(utcnow, args=(1,))
Shutdown the scheduler:
sched.shutdown(wait=True)
Let's work based on now(cost)
as an example:
import pybackground
sched = pybackground.BackgroundScheduler()
print(sched.stopped)
def timer(interval=3):
while not sched.stopped:
now()
sched.start(timer, args=(3,))
timer(interval)
then runs forever in a seperate thread. When you'd like to terminate it, shutdown the scheduler as usual:
sched.shutdown(wait=True)
Use @task
decorator to define your functions and start executing them, scheduling now(cost)
and utcnow(cost)
as an example:
import pybackground
sched = pybackground.BackgroundScheduler()
import time
@pybackground.task(sched)
def now(cost=1):
time.sleep(cost)
print( time.strftime('%Y-%m-%d %H:%M:%S %Z', time.localtime()) )
now.start(cost=1)
@pybackground.task(sched)
def utcnow(cost=1):
time.sleep(cost)
print( time.strftime('%Y-%m-%d %H:%M:%S %Z', time.gmtime()) )
utcnow.start(cost=1)
Shutdown the scheduler in normal way:
sched.shutdown(wait=True)
$ pip install pybackground
class pybackground.BackgroundScheduler/BlockingScheduler(max_worker=<num_cpu_cores>)
max_worker
is set for ThreadPoolExecutor
, default value is the number of CPU cores.
-
stopped
The scheduler is stopped or not,
True
(default) orFalse
. -
latest_id
The latest task id, which may be useful for
pybackground.BlockingScheduler
. -
task
The task id,
Task
object (collections.namedtuple('Task', 'fn, args, kwargs')
) dictionary,{}
as default. -
future
The task id,
Future
object dictionary,{}
as default. -
start(fn, args=(), kwargs={})
Let scheduler start executing your function using thread pool in the background (or foreground). It returns corresponding task id.
-
shutdown(wait=True)
Shutdown the scheduler.
class pybackground.task(scheduler)
-
Use
@task
decorator to define your functions and start executing them:@task(scheduler) def fn(args, kwargs): pass fn.start(*args, **kwargs)
fn.start(*args, **kwargs)
is equivaluent tosheduler.start(fn, args, kwargs)
using normal function definition.