Python utility library for Lightweight Communications and Marshalling (LCM).
Project description
lcmutils
Python utility library for Lightweight Communications and Marshalling (LCM).
Installation
pip install lcmutils
Usage
Typing
lcmutils defines the LCMType protocol for LCM type classes generated via lcm-gen. You can use this protocol to type hint LCM type classes in your Python code.
from lcmutils import LCMType
def publish_lcm_message(lcm: LCM, message: LCMType) -> None:
lcm.publish("channel", message.encode())
LCM Daemon
For many applications, it's desirable to run LCM handling in a background thread. lcmutils provides a LCMDaemon class that wraps an LCM instance and repeatedly calls its the handle method in a background thread.
from lcmutils import LCMDaemon
lcm = LCMDaemon()
@lcm.subscribe("channel1", "channel2")
def handle_message(channel: str, data: bytes) -> None:
print(f"Received message {data} on channel {channel}")
lcm.start()
...
lcm.stop() # will stop when the next message is handled
By default, the LCMDaemon instance will use the blocking LCM.handle method. If you want to use the LCM.handle_timeout method instead, you can pass a timeout_millis argument to the constructor. You can also pass a start argument to automatically start the daemon.
from lcmutils import LCMDaemon
# Use LCM.handle_timeout with a 100ms timeout and start the daemon
lcm = LCMDaemon(timeout_millis=100, start=True)
...
lcm.stop() # will stop within 100ms
LCMDaemon can be passed an existing LCM instance to wrap, or it will create a new LCM instance if none is provided.
from lcm import LCM
from lcmutils import LCMDaemon
lcm = LCM("udpm://239.255.76.67:7667?ttl=1") # create an LCM instance with ttl=1
lcm_daemon = LCMDaemon(lcm, start=True)
...
lcm_daemon.stop()
Type Registry
lcmutils provides an LCMTypeRegistry class that can be used to register and lookup LCM type classes by fingerprint.
from lcmutils import LCMTypeRegistry
from my_lcm_types import MyLCMType
registry = LCMTypeRegistry(MyLCMType)
# or:
# registry = LCMTypeRegistry()
# registry.register(MyLCMType)
msg = MyLCMType()
msg_encoded = msg.encode()
print(registry.detect(msg_encoded)) # MyLCMType
print(registry.decode(msg_encoded) == msg) # True
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 Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lcmutils-0.2.0.tar.gz.
File metadata
- Download URL: lcmutils-0.2.0.tar.gz
- Upload date:
- Size: 5.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.27
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a55dbb87debe8daa7b50e565c51e88d679f62330653b45d35592e97dce621aa
|
|
| MD5 |
a0211ba4c841655e7bc52822b021d3fb
|
|
| BLAKE2b-256 |
3184abf2703c3db20370ad593c5044af8503d894effe9399c1d84036230d50c0
|
File details
Details for the file lcmutils-0.2.0-py3-none-any.whl.
File metadata
- Download URL: lcmutils-0.2.0-py3-none-any.whl
- Upload date:
- Size: 5.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.27
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
00ca19e0927fdbefecc9ce90d26544dc368947add060d8eb5963f639a28e3e4f
|
|
| MD5 |
cf140870030cdd44afd8370a23030566
|
|
| BLAKE2b-256 |
a341e481a7ffd581fd4b6f704b7f629c95b955b2c87fd765b6df0bc6db04c4a9
|