Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

Awesome Lists containing this project

README

        

ROSNY

[![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.8

From 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, ComposeNode

class 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 += 1

class 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()
```