Skip to main content

A lightweight scheduler that runs tasks in the background

Project description

PyBackground

PyBackground is

PyBackground supports to

  • execute tasks using thread pool
  • run in the background (or foreground)
  • use @task decorator to define task

Quickstart

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)

Handle with the infinite loops

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)

Play with the @task decorator

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)

Install PyBackground

$ pip install pybackground

Documentation

BackgroundScheduler/BlockingScheduler

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) or False.

  • 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.

task

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 to sheduler.start(fn, args, kwargs) using normal function definition.

Related Projects

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

PyBackground-0.1.2.tar.gz (3.6 kB view hashes)

Uploaded Source

Built Distribution

PyBackground-0.1.2-py3-none-any.whl (5.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page