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
@taskdecorator 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 pybackgroundclass pybackground.BackgroundScheduler/BlockingScheduler(max_worker=<num_cpu_cores>)max_worker is set for ThreadPoolExecutor, default value is the number of CPU cores.
-
stoppedThe scheduler is stopped or not,
True(default) orFalse. -
latest_idThe latest task id, which may be useful for
pybackground.BlockingScheduler. -
taskThe task id,
Taskobject (collections.namedtuple('Task', 'fn, args, kwargs')) dictionary,{}as default. -
futureThe task id,
Futureobject 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
@taskdecorator 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.