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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file lightsleep-0.0.6-py3-none-any.whl
.
File metadata
- Download URL: lightsleep-0.0.6-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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3365442475bce9c1b3512895ece3e3fd22d37f5f4502fe82af7f1a28318be831 |
|
MD5 | f16eedfda2a3392184ef5ac31ae07982 |
|
BLAKE2b-256 | 0384354ee26117d5cc2697d418b872d35b45547dea322e1d0706ea5af1641c8c |