Skip to main content

A lightweight solution for long-running tasks

Project description

lilota

lilota is a lightweight Python library for executing long-running tasks in the background without the complexity of full task queue systems like Celery or RabbitMQ.

It is designed for simple, asynchronous task execution with minimal setup and overhead.

Features

  • Run long-running tasks in separate processes
  • Simple API and minimal configuration
  • Persistent task state stored in a database
  • No message broker required
  • Suitable for web applications and background jobs

When to use lilota

Use lilota when your application needs to run tasks that take time, such as:

  • image or file processing
  • report generation
  • sending emails
  • heavy computations

Instead of blocking the request, lilota lets you start the task in the background and immediately return a response to the user.

Installation

pip install lilota

Quick example

Define input and output models

from dataclasses import dataclass
from lilota.core import Lilota

@dataclass
class AddInput:
  a: int
  b: int

@dataclass
class AddOutput:
  sum: int

Create a lilota instance

lilota = Lilota(
  db_url="postgresql+psycopg://postgres:postgres@localhost:5432/lilota_sample"
)

In this example we use a url to a postgres database. lilota uses SQLAlchemy and therefore all databases that are supported by SQLAlchemy can be used here.

Note: SQLite is an excellent database in many scenarios, but for a multiprocessing application like lilota, it has fundamental limitations that often make it a poor fit.

Register a background task

@lilota.register("add", input_model=AddInput, output_model=AddOutput)
def add(data: AddInput) -> AddOutput:
  return AddOutput(sum=data.a + data.b)

Start lilota

lilota.start()

Schedule a task

task_id = lilota.schedule("add", AddInput(a=2, b=3))

Task persistence

schedule will directly execute our function in a separate process. Information about the executed task are stored inside the database in the task table:

Columns Notes
id Primary key
name Task name
pid Process ID
status pending, running, completed, failed, cancelled
progress_percentage Progress (0-100)
start_date_time Start timestamp
end_date_time End timestamp
input Serialized input data
output Serialized output data
exception Exception details if the task fails

Shutdown

lilota.stop()

lilota will wait for running tasks to finish before exiting.

Full example

The full example can be found here: https://github.com/tobiasroessler/lilota-sample/blob/main/src/2-add-two-numbers.py

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

lilota-0.5.0.tar.gz (17.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lilota-0.5.0-py3-none-any.whl (16.7 kB view details)

Uploaded Python 3

File details

Details for the file lilota-0.5.0.tar.gz.

File metadata

  • Download URL: lilota-0.5.0.tar.gz
  • Upload date:
  • Size: 17.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for lilota-0.5.0.tar.gz
Algorithm Hash digest
SHA256 871ddb336dc64c816ece991cd56c80bfad328a2d2b5d0dcb1c4a7ed705c458d4
MD5 2d6703bb0f73a9d9316667159fe73285
BLAKE2b-256 e87d86e56b3e5b8164bbf6908fbe349fa95db0125d0b5deebaeb62fe96feba65

See more details on using hashes here.

File details

Details for the file lilota-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: lilota-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 16.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for lilota-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c0ea1dc935ed6c5c0026073b35aab63eaceb3edd89000d799d777ca8df1b16af
MD5 48cfb50faab213ccbac1e97cfb6367ff
BLAKE2b-256 52e9f9718a960df65b04cbcdfc81dfe8182b2e90f9007a5f9bd8420acdad3d5d

See more details on using hashes here.

Supported by

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