Skip to main content

The chainlet library offers a lightweight model to create processing pipelines from generators, coroutines, functions and custom objects. Instead of requiring you to nest code or insert hooks, chainlet offers a concise, intuitive binding syntax:

# regular nested generators
csv_writer(flatten(xml_reader(path='data.xml'), join='.'.join), path='data.csv')
# chainlet pipeline
xml_reader(path='data.xml') >> flatten(join='.'.join) >> csv_writer(path='data.csv')

Processing pipelines created with chainlet are an extension of generators and functions: they can be iterated to pull results, called to push input or even used to get/fetch a stream of data. The bindings of chainlet allow to compose complex processing chains from simple building blocks.

Creating new chainlets is simple, requiring you only to define the processing of data. It is usually sufficient to use regular functions, generators or coroutines, and let chainlet handle the rest:

@chainlet.genlet
def moving_average(window_size=8):
    buffer = collections.deque([(yield)], maxlen=window_size)
    while True:
        new_value = yield(sum(buffer)/len(buffer))
        buffer.append(new_value)

Features

We have designed chainlet to be a simple, intuitive library:

  • Modularize your code with small, independent processing blocks.

  • Intuitively compose processing chains from individual elements.

  • Automatically integrate functions, generators and coroutines in your chains.

  • Extend your processing capabilities with complex chains that fork and join as needed.

Under the hood, chainlet merges iterator and functional paradigms in a minimal fashion to stay lightweight.

  • Fully compliant with the Generator interface to integrate with existing code.

  • Implicit tail recursion elimination for linear pipelines, and premature end of chain traversal.

  • Push and pull chains iteratively, continuously, or even asynchronously.

  • Simple interface to extend or supersede pipeline traversal and processing.

At its heart chainlet strives to be as Pythonic as possible: You write python, and you get python. No trampolines, callbacks, stacks, handlers, …

We take care of the ugly bits so you do not have to.

Looking to get started? Check out our docs: Documentation Status

Found an issue or have suggestions? Head straight to our issue tracker: Open Issues

Status

The chainlet library originates from our need for accessible concurrency in data center administration. We have since adopted the library in a production environment for a number of use cases: * Modular monitoring suite using stream based data extraction and translation. * Management scripts for concurrent operations on many files at once.

Both the grammar and general interfaces for processing chains, trees and graphs are stable. Ongoing work is mainly focused on streamlining the parallel iteration interface. A major focus is to add automatic concurrency, asynchronicity and parallelism. Our target is an opt-in approach to features from functional programming and static optimisations.

Recent Changes

v1.3.0

Thread-based concurrent traversal, improved single- and multi-stream distinction.

v1.2.0

Synchronous concurrent traversal, chain slicing and merging, fully featured function and generator wrappers

v1.1.0

Added chainlet versions of builtins and protocol interfaces

v1.0.0

Initial release

Release files for chainlet 1.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for chainlet 1.3.1
File Size Uploaded
chainlet-1.3.1.tar.gz 5.0 MB Details

Release files / chainlet-1.3.1.tar.gz

Download URL chainlet-1.3.1.tar.gz
Size 5.0 MB
Tags Source
SHA-256 checksum
How to use checksums
1aac084558f3f11a1c453ae8ccae3f58981e9ac5fb8401687220aecbb3d4bcb8
BLAKE2b-256 checksum
How to use checksums
cfc53f9fcd74f613b7b35184b4055b40a6c434cbe75c1efaf3ae31175351d39e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

1.3.1 This release

1 release file

1.3.0

1 release file

1.2.0

1 release file

1.1.0

2 release files

1.0.0

1 release file

0.10.2

2 release files

0.9.0

2 release files

0.8.1

2 release files

0.1.dev1

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page