Uma biblioteca para compor programas assíncronos e baseados em eventos usando coleções observáveis e funções de operador de consulta em Python
Para v3.X, vá para o branch v3.
ReactiveX para Python v4.x é executado em Python 3.7 ou superior. Para instalar:
pip3 install reactivex
ReactiveX for Python (RxPY) é uma biblioteca para compor programas assíncronos e baseados em eventos usando sequências observáveis e operadores de consulta canalizáveis em Python. Usando Rx, os desenvolvedores representam fluxos de dados assíncronos com Observáveis, consultam fluxos de dados assíncronos usando operadores e parametrizam a simultaneidade em fluxos de dados/eventos usando Agendadores.
import reactivex as rx
from reactivex import operators as ops
source = rx . of ( "Alpha" , "Beta" , "Gamma" , "Delta" , "Epsilon" )
composed = source . pipe (
ops . map ( lambda s : len ( s )),
ops . filter ( lambda i : i >= 5 )
)
composed . subscribe ( lambda value : print ( "Received {0}" . format ( value )))
Leia a documentação para conhecer os princípios do ReactiveX e obter a referência completa dos operadores disponíveis.
Se você precisar migrar o código do RxPY v1.x ou v3.x, leia a seção de migração.
Há também uma lista de documentação de terceiros disponível aqui.
Participe da conversa nas discussões do GitHub! se você tiver alguma dúvida ou sugestão.
ReactiveX para Python é uma implementação bastante completa de Rx com mais de 120 operadores e mais de 1300 testes de unidade aprovados. RxPY é principalmente uma porta direta de RxJS, mas também empresta um pouco de Rx.NET e RxJava em termos de threading e operadores de bloqueio.
ReactiveX para Python segue o PEP 8, portanto, todos os nomes de funções e métodos são snake_cased
ou seja, letras minúsculas com palavras separadas por sublinhados conforme necessário para melhorar a legibilidade.
Assim, código .NET como:
var group = source . GroupBy ( i => i % 3 ) ;
precisa ser escrito com um _
em Python:
group = source . pipe ( ops . group_by ( lambda i : i % 3 ))
Com o ReactiveX para Python, você deve usar argumentos de palavras-chave nomeadas em vez de argumentos posicionais quando um operador tiver vários argumentos opcionais. O RxPY não tentará detectar quais argumentos você está fornecendo ao operador (ou não).
Este projeto é gerenciado usando Poesia. O código é formatado usando Black, isort. O código é verificado estaticamente por tipo usando pyright e mypy.
Se você quiser aproveitar as vantagens da integração VSCode padrão, primeiro configure o Poetry para criar seu ambiente virtual no repositório:
poetry config virtualenvs.in-project true
Após clonar o repositório, ative as ferramentas:
poetry install
poetry run pre-commit install
Execute testes de unidade:
poetry run pytest
Execute verificações de código (manualmente):
poetry run pre-commit run --all-files