semvec/pypi-packages huggingface dataset:
aioredis-lock 0.1.0
Wrapper to provide distributed locks in aioredis
Requires Python: >=3.7
Keywords: aioredis,redis,locking,distributed,asyncio

# aioredis_lock

[![CircleCI](https://circleci.com/gh/mrasband/aioredis-lock.svg?style=svg)](https://circleci.com/gh/mrasband/aioredis-lock)

Implementation of distributed locking with [aioredis](https://github.com/aio-libs/aioredis), an asyncio based redis client.

This is a standalone lib until, and if, [aio-libs/aioredis#573](https://github.com/aio-libs/aioredis/pull/573) is accepted.

## Usage

You need an `aioredis.RedisConnection` or `aioredis.ConnectionsPool` already created.

### Mutex

```python
from aioredis_lock import RedisLock, LockTimeoutError

try:
    async with RedisLock(
        pool,
        key="foobar",
        # how long until the lock should expire (seconds). this can be extended
        # via `await lock.extend(30)`
        timeout=30,
        # you can customize how long to allow the lock acquisitions to be
        # attempted.
        wait_timeout=30,
    ) as lock:
        # If you get here, you now have a lock and are the only program that
        # should be running this code at this moment.

        # do some work...

        # we may want it longer...
        await lock.extend(30)

except LockTimeoutError:
    # The lock could not be acquired by this worker and we should give up
    pass
```

### Simple Leader/Follower(s)

Let's suppose you need a simple leader/follower type implementation where you have a number of web-workers but just want 1 to preform a repeated task. In the case the leader fails someone else should pick up the work. Simply pass `wait_timeout=None` to RedisLock allowing the worker to keep trying to get a lock for when the leader eventually fails. The main complication here is extending the lock and validating the leader still owns it.

```python
from aioredis_lock import RedisLock

# if the lock is lost, we still want to be a follower
while True:

    # wait indefinitely to acquire a lock
    async with RedisLock(pool, "shared_key", wait_timeout=None) as lock:

        # hold the lock as long as possible
        while True:
            if not await lock.is_owner():
                logger.debug("We are no longer the lock owner, falling back")
                break

            # do some work

            if not await lock.renew():
                logger.debug("We lost the lock, falling back to follower mode")
                break
```

This mostly delegates the work of selecting and more importantly promoting leaders.
misc-date-utilities 1.0.7
Date subtraction, parsing, and random timestamp generation.

# Misc Date Utilities
Provides date subtraction, parsing, and random timestamp generation. Source code [on GitHub](https://github.com/ktraw2/misc-date-utilities).

### date_difference
For subtracting two dates from each other, provides class `DateDifference` that can store the difference between two dates, provides some overloaded functionality, and provides some static methods `subtract_datetimes` and `subtract_datestrings` to subtract datetimes and formatted date strings, respectively.

### simple_parse
A simple parser that is used in the interpretation of date strings, provides `parse_raw_date_string` to get a datetime from a string formatted as `"%Y-%m-%d "` (note the trailing space), or as `"%Y-%m-%d %H:%M"`.

### random_timestamps
Functionality for getting a random time within a specified range, provides `generate_random_timestamp` to generates a random timestamp in the range [00:00:00 - hours:minutes:seconds).

### tests
Unit tests are provided for `subtract_datestrings`.
td3a_cpp 0.1.1
Example of a python module including cython and openmp

td3a_cpp: template to use cython and C++ with python
====================================================

.. image:: https://raw.githubusercontent.com/sdpython/td3a_cpp/master/doc/_static/logo.png
    :width: 50

`documentation <http://www.xavierdupre.fr/app/td3a_cpp/helpsphinx/index.html>`_

Simple template to implement an algorithm with *cython* and *openmp*.
It implements simple examples to demonstrate the speed up
obtained by using *cython*. The module must be compiled
to be used inplace:

::

    python setup.py build_ext --inplace

Generate the setup in subfolder ``dist``:

::

    python setup.py sdist

Generate the documentation in folder ``dist/html``:

::

    python -m sphinx -T -b html doc dist/html

Run the unit tests:

::

    python -m unittest discover tests

Or:

::

    python -m pytest
    
To check style:

::

    python -m flake8 td3a_cpp tests examples

The function *check* or the command line ``python -m td3a_cpp check``
checks the module is properly installed and returns processing
time for a couple of functions or simply:

::

    import td3a_cpp
    td3a_cpp.check()