loongson/pypi/: elperiodic-1.2 metadata and description

Homepage Simple index

Phase-locked userland scheduling library

author Maksym Sobolyev
author_email sobomax@gmail.com
classifiers
  • License :: OSI Approved :: BSD License
  • Operating System :: POSIX
  • Programming Language :: C
  • Programming Language :: Python
description_content_type text/markdown
requires_python >=2.7

Because this project isn't in the mirror_whitelist, no releases from root/pypi are included.

File Tox results History
ElPeriodic-1.2-cp38-cp38-linux_loongarch64.whl
Size
27 KB
Type
Python Wheel
Python
3.8

Build Status@GitHub Build Status Coverage Status

libElPeriodic

Library to run frequent periodic tasks.

Principle of Operation

The libElPeriodic is designed to simplify writing control loops that are expected to run at constant "tick" intervals with smallest possible overhead and little or no support from the underlying run time environment.

The library is optimized to align active periods of the control loop to the set frequency (and optionally phase as well) by applying phase locked loop design with a proportional phase detector and a low-pass filter as an error amplifier.

Usage

Sample usage pattern is demonstrated below. The code block denoted by the square brackets will be executing 125.5 times a second, untul the value returned by the is_runnable() routine is non-zero. Provided of course that the "logic" does not take more than 0.01 second to run on average and that OS scheduler plays the ball.

#include <elperiodic.h>

extern int is_runnable(void);

void
event_loop(void)
{
    double frequency = 125.5; /* Hz */
    void *elp;
    int i;

    prd = prdic_init(freq, 0.0);
    assert(prd != NULL);

    while (is_runnable()) {
//      [----------------------];
//      [Insert your logic here];
//      [----------------------];
        prdic_procrastinate(prd);
    }
    prdic_free(prd);
}

Story

It came about having to write the same code over and over again in multiple real-time projects, ranging from game Digger, RTP relay server RTPProxy. It has also been recently utilized to replace a heavy-weight (and at the time not portable to Python 3) "Twisted" framework in the Python Sippy B2BUA project.