Реактивное программирование — это парадигма программирования, которая касается потоков данных и распространения изменений. Это означает, что когда поток данных испускается одним компонентом, изменение будет распространяться на другие компоненты с помощью библиотеки реактивного программирования. Распространение изменений будет продолжаться, пока не достигнет конечного получателя. Разница между управляемым событиями и реактивным программированием заключается в том, что программирование, управляемое событиями, вращается вокруг событий, а реактивное программирование вращается вокруг данных.
ReactiveX или RX для реактивного программирования
ReactiveX или Raective Extension — самая известная реализация реактивного программирования. Работа ReactiveX зависит от следующих двух классов:
Наблюдаемый класс
Этот класс является источником потока данных или событий и упаковывает входящие данные, чтобы данные могли быть переданы из одного потока в другой. Он не будет предоставлять данные, пока какой-либо наблюдатель не подпишется на него.
Класс наблюдателя
Этот класс потребляет поток данных, испускаемый наблюдаемым . Может быть несколько наблюдателей с наблюдаемыми, и каждый наблюдатель будет получать каждый элемент данных, который испускается. Наблюдатель может получить три типа событий, подписавшись на наблюдаемые —
-
Событие on_next () — подразумевает наличие элемента в потоке данных.
-
Событие on_completed () — подразумевает завершение эмиссии, и больше ничего не приходит.
-
Событие on_error () — также подразумевает завершение эмиссии, но в случае, когда наблюдаемая выдает ошибку.
Событие on_next () — подразумевает наличие элемента в потоке данных.
Событие on_completed () — подразумевает завершение эмиссии, и больше ничего не приходит.
Событие on_error () — также подразумевает завершение эмиссии, но в случае, когда наблюдаемая выдает ошибку.
RxPY — модуль Python для реактивного программирования
RxPY — это модуль Python, который можно использовать для реактивного программирования. Мы должны убедиться, что модуль установлен. Следующая команда может быть использована для установки модуля RxPY —
pip install RxPY
пример
Ниже приведен скрипт Python, который использует модуль RxPY и его классы Observable и Observe для реактивного программирования. Есть в основном два класса —
-
get_strings () — для получения строк от наблюдателя.
-
PrintObserver () — для печати строк из наблюдателя. Он использует все три события класса наблюдателя. Он также использует класс subscribe ().
get_strings () — для получения строк от наблюдателя.
PrintObserver () — для печати строк из наблюдателя. Он использует все три события класса наблюдателя. Он также использует класс subscribe ().
from rx import Observable, Observer def get_strings(observer): observer.on_next("Ram") observer.on_next("Mohan") observer.on_next("Shyam") observer.on_completed() class PrintObserver(Observer): def on_next(self, value): print("Received {0}".format(value)) def on_completed(self): print("Finished") def on_error(self, error): print("Error: {0}".format(error)) source = Observable.create(get_strings) source.subscribe(PrintObserver())
Выход
Received Ram Received Mohan Received Shyam Finished
PyFunctional библиотека для реактивного программирования
PyFunctional — это еще одна библиотека Python, которую можно использовать для реактивного программирования. Это позволяет нам создавать функциональные программы с использованием языка программирования Python. Это полезно, потому что позволяет нам создавать конвейеры данных, используя цепные функциональные операторы.
Разница между RxPY и PyFunctional
Обе библиотеки используются для реактивного программирования и обрабатывают поток одинаковым образом, но основное различие между ними зависит от обработки данных. RxPY обрабатывает данные и события в системе, а PyFunctional фокусируется на преобразовании данных с использованием парадигм функционального программирования.
Установка PyFunctional модуля
Нам нужно установить этот модуль перед его использованием. Он может быть установлен с помощью команды pip следующим образом:
pip install pyfunctional
пример
В следующем примере используется модуль PyFunctional и его класс seq, которые действуют как объект потока, с которым мы можем перебирать и манипулировать. В этой программе он отображает последовательность с помощью функции lamda, которая удваивает каждое значение, затем фильтрует значение, где x больше 4, и, наконец, уменьшает последовательность до суммы всех оставшихся значений.