The Python Banyan Framework
The Python Banyan Framework is a lightweight, reactive framework used to create flexible, non-blocking, event driven, asynchronous applications.
Python Banyan comes with full documentation that includes a User's Guide with hands-on examples, as well documentation for the OneGPIO Project that allows you to quickly and easily build reusable GPIO projects for the Arduino, ESP-8266, and Raspberry Pi.
Base class API's may be viewed here.
It is being used by Palace Games to concurrently monitor hundreds of real-time sensors and actuators.
- Based on a network connected Publish/Subscribe model, Banyan components publish user defined protocol messages in the form of Python dictionaries.
- A Banyan protocol message may contain Numpy data.
- Applications may reside on a single computer or be distributed across multiple computers without having to change source code.
- Compatible Banyan Frameworks are available for JavaScript, Ruby, and Java. Components written in any of these languages can interact with components of a differing language without modification.
- Runs on Python 2 or Python 3 (recommended).
To install, view the full installation instructions.
A Simple Banyan Echo Server:
import sys
from python_banyan.banyan_base import BanyanBase
class EchoServer(BanyanBase):
"""
This class is a simple Banyan echo server
"""
def __init__(self, ):
# initialize the parent
super(EchoServer, self).__init__(process_name='EchoServer')
# subscribe to receive 'echo' messages from the client
self.set_subscriber_topic('echo')
# wait for messages to arrive
try:
self.receive_loop()
except KeyboardInterrupt:
self.clean_up()
sys.exit(0)
def incoming_message_processing(self, topic, payload):
"""
Process incoming messages from the client
:param topic: message topic
:param payload: message payload
"""
# republish the message with a topic of reply
self.publish_payload(payload, 'reply')
# extract the message number from the payload
print('Message number:', payload['message_number'])
A Simple Banyan Echo Client:
import sys
from python_banyan.banyan_base import BanyanBase
class EchoClient(BanyanBase):
"""
This is a simple echo client derived from the BanyanBase class.
It sends out a series of messages and expects an
echo reply from the server.
"""
def __init__(self):
# initialize the parent
super(EchoClient, self).__init__(process_name='EchoClient')
# accept banyan messages with the topic of reply
self.set_subscriber_topic('reply')
# sequence number of messages and total number of messages to send
self.message_number = self.number_of_messages = 10
# send the first message - make sure that the server is already started
self.publish_payload({'message_number': self.message_number}, 'echo')
# get the reply messages
try:
self.receive_loop()
except KeyboardInterrupt:
self.clean_up()
sys.exit(0)
def incoming_message_processing(self, topic, payload):
"""
Process incoming messages received from the echo client
:param topic: Message Topic string
:param payload: Message Data
"""
# When a message is received and its number is zero, finish up.
if payload['message_number'] == 0:
print(str(self.number_of_messages) + ' messages sent and received. ')
input('Press enter to exit.')
self.clean_up()
sys.exit(0)
# bump the message number and send the message out
else:
self.message_number -= 1
if self.message_number >= 0:
self.publish_payload({'message_number': self.message_number}, 'echo')
This project was developed with Pycharm
Release files for python-banyan 3.16
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| python_banyan-3.16.tar.gz | 105.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| python_banyan-3.16-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 286.7 kB
Release files / python_banyan-3.16.tar.gz
| Download URL | python_banyan-3.16.tar.gz |
|---|---|
| Size | 105.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2f9867a8bbbf37d33ae94c0f104caf3a0c139af2dc6c2d90fc465b107e16dbe6
|
|
BLAKE2b-256 checksum How to use checksums |
2df3cd95892f864424ce617c0fa37fe724bcf068acc88d41dd24b06afe9c06c5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.0.0 CPython/3.12.3
|
Release files / python_banyan-3.16-py3-none-any.whl
| Download URL | python_banyan-3.16-py3-none-any.whl |
|---|---|
| Size | 181.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b957b2ac8f8644efe100137ad98cc79252458d7d7b4a091c54c7812fd3a31f61
|
|
BLAKE2b-256 checksum How to use checksums |
33302482909869231ceecb655c7cf4c888ceec86d16df731dda5b213db78e356
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.0.0 CPython/3.12.3
|