Skip to main content

sleep() you can interrupt with redis or websocket event

Project description

lightsleep

Lightsleep is sleep() you can interrupt with redis or websocket event or touch/write file.

This is nice feature if you want to do some actions periodically AND immediately on some event.

Install

Install from pypi:

pip3 install lightsleep

... or install from git:

pip3 install git+https://github.com/yaroslaff/lightsleep

lsleep

lsleep.py is very short simple CLI utility (better then /usr/bin/sleep) which is also demo how to use lightsleep python module.

Almost useless example where lsleep is identical to /usr/bin/sleep (sleep 60 seconds):

lsleep.py 60

Even this example has some benefits - if your program will run external program lsleep.py instead of sleep(), you can always send kill to lsleep (e.g. with killall lsleep.py) and this is much more reliable then interrupting sleep() inside program. But thats same as /usr/bin/sleep.

If -t/--title set, lsleep.py will use setproctitle. So, you may call lsleep.py 600 -t mysleep and then killall mysleep to stop only this lsleep process.

lsleep.py -h will list all available hooks and their default options

Interrupt sleep with touch or any write

lsleep.py 300 --hook mtime path=/tmp/x

You can interrupt sleep with touch /tmp/x or echo anything > /tmp/x.

interrupt sleep with redis PUBLISH command

lsleep.py 60 --hook redis (defaults: local redis server, channel sleep)

Interrupt this sleep from redis-cli:

127.0.0.1:6379> PUBLISH sleep anything
(integer) 1

To override defaults parameters:

lsleep.py 60 --hook redis url=redis://localhost:6379/0 msg=stop ch=sleep

(seting msg to any value will requre to PUBLISH exact this value. If msg is not set, any message will interrupt sleep)

Interrupt sleep with websocket

lsleep.py 300 --hook ws url=http://localhost:8899/ room=myapps::u1 secret=myapps-pass

You may use ws-emit websocket application as server.

optional secret if room requires secret to join (when room name containts '::'). This should match ws-emit secret in redis, set with SET ws-emit::secret::myapps myapps-pass

If event and data specified, sleep will be interrupted only if websocket event name and data matches it.

Using sleep in your package

See lsleep.py code, it's very small. Example:

from lightsleep import Sleep

s = Sleep(hook=['redis','msg=stop', 'ch=sleep'])
s.sleep(60)

sleep() returns message which interrupted sleep (if hook supports this). For example, if redis hook used and sleep was interrupted with PUBLISH sleep zzz, sleep() will return zzz.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

lightsleep-0.0.5-py3-none-any.whl (7.2 kB view details)

Uploaded Python 3

File details

Details for the file lightsleep-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: lightsleep-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 7.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.2

File hashes

Hashes for lightsleep-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 8881c4cc1f21ef9a9878f2fc40c4678c425198f23aaae15ab738047f4f769c59
MD5 b0a905a797c1d8d0d6b43ea6347436b1
BLAKE2b-256 91346a926ca91250bc2c26b8ea0a793b7b4f34ea5313920915f903787840fd90

See more details on using hashes here.

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