Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lromul/rosny
Lightweight library for building concurrent systems
https://github.com/lromul/rosny
concurrency multiprocessing parallel python stream-processing threading
Last synced: 5 days ago
JSON representation
Lightweight library for building concurrent systems
- Host: GitHub
- URL: https://github.com/lromul/rosny
- Owner: lRomul
- License: mit
- Created: 2021-04-22T09:32:27.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2024-04-16T16:15:49.000Z (7 months ago)
- Last Synced: 2024-11-02T08:11:39.252Z (12 days ago)
- Topics: concurrency, multiprocessing, parallel, python, stream-processing, threading
- Language: Python
- Homepage: https://lRomul.github.io/rosny
- Size: 426 KB
- Stars: 12
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![PyPI version](https://badge.fury.io/py/rosny.svg)](https://badge.fury.io/py/rosny)
[![Test](https://github.com/lRomul/rosny/actions/workflows/test.yml/badge.svg)](https://github.com/lRomul/rosny/actions/workflows/test.yml)
[![CodeFactor](https://www.codefactor.io/repository/github/lromul/rosny/badge)](https://www.codefactor.io/repository/github/lromul/rosny)
[![codecov](https://codecov.io/gh/lRomul/rosny/branch/master/graph/badge.svg?token=VPB9M1RAVP)](https://codecov.io/gh/lRomul/rosny)
[![Downloads](https://static.pepy.tech/personalized-badge/rosny?period=total&units=international_system&left_color=grey&right_color=brightgreen&left_text=Downloads)](https://pepy.tech/project/rosny)rosny is a lightweight library for building concurrent systems.
## Installation
Tested on:
* Linux
* Python >= 3.8From pip:
```bash
pip install rosny
```From source:
```bash
pip install git+https://github.com/lRomul/rosny.git@master
```## Example
```python
from multiprocessing import Queue
from rosny import ThreadNode, ProcessNode, ComposeNodeclass SenderNode(ThreadNode): # using threading.Thread
def __init__(self, queue: Queue):
super().__init__(loop_rate=30)
self.queue = queue
self.count = 0# run the method in a loop in a separate thread
def work(self):
self.queue.put(self.count)
self.logger.info(f'put {self.count}')
self.count += 1class ReceiverNode(ProcessNode): # using multiprocessing.Process
def __init__(self, queue: Queue):
super().__init__()
self.queue = queue# run the method in a loop in a separate process
def work(self):
value = self.queue.get(timeout=1)
self.logger.info(f'get {value}')class MainNode(ComposeNode): # merging several nodes
def __init__(self):
super().__init__()
queue = Queue()
self.sender = SenderNode(queue)
self.receiver = ReceiverNode(queue)if __name__ == "__main__":
node = MainNode()
node.start()
node.wait(5)
node.stop()
node.join()
```