RxPy - Esempi

In questo capitolo, discuteremo in dettaglio i seguenti argomenti:

  • Esempio di base che mostra il funzionamento di osservabile, operatori e sottoscrizione all'osservatore.
  • Differenza tra osservabile e soggetto.
  • Capire le osservabili fredde e calde.

Di seguito è riportato un esempio di base che mostra il funzionamento di osservabili, operatori e sottoscrizione all'osservatore.

Esempio

test.py

import requests
import rx
import json
from rx import operators as ops
def filternames(x):
   if (x["name"].startswith("C")):
      return x["name"]
   else :
      return ""
content = requests.get('https://jsonplaceholder.typicode.com/users')
y = json.loads(content.text)
source = rx.from_(y)
case1 = source.pipe(
   ops.filter(lambda c: filternames(c)),
   ops.map(lambda a:a["name"])
)
case1.subscribe(
   on_next = lambda i: print("Got - {0}".format(i)), 8. RxPy — Examples
   on_error = lambda e: print("Error : {0}".format(e)),
   on_completed = lambda: print("Job Done!"),
)

Ecco un esempio molto semplice, in cui ottengo i dati dell'utente da questo URL:

https://jsonplaceholder.typicode.com/users.

Filtrare i dati, per dare i nomi che iniziano con "C", e successivamente utilizzare la mappa per restituire solo i nomi. Ecco l'output per lo stesso -

E:\pyrx\examples>python test.py
Got - Clementine Bauch
Got - Chelsey Dietrich
Got - Clementina DuBuque
Job Done!

Differenza tra osservabile e soggetto

In questo esempio, vedremo la differenza tra un osservabile e un soggetto.

from rx import of, operators as op
import random
test1 = of(1,2,3,4,5)
sub1 = test1.pipe(
   op.map(lambda a : a+random.random())
)
print("From first subscriber")
subscriber1 = sub1.subscribe(lambda i: print("From sub1 {0}".format(i)))
print("From second subscriber")
subscriber2 = sub1.subscribe(lambda i: print("From sub2 {0}".format(i)))

Produzione

E:\pyrx>python testrx.py
From first subscriber
From sub1 1.610450821095726
From sub1 2.9567564032037335
From sub1 3.933217537811936
From sub1 4.82444905626622
From sub1 5.929414892567188
From second subscriber
From sub2 1.8573813517529874
From sub2 2.902433239469483
From sub2 3.2289868093016825
From sub2 4.050413890694411
From sub2 5.226515068012821

Nell'esempio sopra, ogni volta che ti iscrivi all'osservabile, ti darà nuovi valori.

Oggetto Esempio

from rx import of, operators as op
import random
from rx.subject import Subject
subject_test = Subject()
subject_test.subscribe(
   lambda x: print("From sub1 {0}".format(x))
)
subject_test.subscribe(
   lambda x: print("From sub2 {0}".format(x))
)
test1 = of(1,2,3,4,5)
sub1 = test1.pipe(
   op.map(lambda a : a+random.random())
)
subscriber = sub1.subscribe(subject_test)

Produzione

E:\pyrx>python testrx.py
From sub1 1.1789422863284509
From sub2 1.1789422863284509
From sub1 2.5525627903260153
From sub2 2.5525627903260153
From sub1 3.4191549324778325
From sub2 3.4191549324778325
From sub1 4.644042420199624
From sub2 4.644042420199624
From sub1 5.079896897489065
From sub2 5.079896897489065

Se vedi i valori sono condivisi, tra entrambi gli iscritti utilizzando l'oggetto.

Comprensione degli osservabili freddi e caldi

Un osservabile è classificato come

  • Osservabili freddi
  • Osservabili caldi

La differenza nelle osservabili sarà notata quando più abbonati si stanno abbonando.

Osservabili freddi

Osservabili a freddo, sono osservabili che vengono eseguiti e rende i dati ogni volta che vengono sottoscritti. Quando viene sottoscritto, l'osservabile viene eseguito e vengono forniti i nuovi valori.

Il seguente esempio fornisce la comprensione del freddo osservabile.

from rx import of, operators as op
import random
test1 = of(1,2,3,4,5)
sub1 = test1.pipe(
   op.map(lambda a : a+random.random())
)
print("From first subscriber")
subscriber1 = sub1.subscribe(lambda i: print("From sub1 {0}".format(i)))
print("From second subscriber")
subscriber2 = sub1.subscribe(lambda i: print("From sub2 {0}".format(i)))

Produzione

E:\pyrx>python testrx.py
From first subscriber
From sub1 1.610450821095726
From sub1 2.9567564032037335
From sub1 3.933217537811936
From sub1 4.82444905626622
From sub1 5.929414892567188
From second subscriber
From sub2 1.8573813517529874
From sub2 2.902433239469483
From sub2 3.2289868093016825
From sub2 4.050413890694411
From sub2 5.226515068012821

Nell'esempio sopra, ogni volta che ti iscrivi all'osservabile, eseguirà l'osservabile ed emetterà valori. I valori possono anche differire da abbonato ad abbonato come mostrato nell'esempio precedente.

Osservabili caldi

Nel caso di osservabili a caldo, emetteranno i valori quando saranno pronti e non aspetteranno sempre un abbonamento. Quando i valori vengono emessi, tutti gli abbonati riceveranno lo stesso valore.

È possibile utilizzare l'osservabile a caldo quando si desidera che i valori vengano emessi quando l'osservabile è pronto o si desidera condividere gli stessi valori con tutti i propri iscritti.

Un esempio di caldo osservabile è Soggetto e operatori collegabili.

from rx import of, operators as op
import random
from rx.subject import Subject
subject_test = Subject()
subject_test.subscribe(
   lambda x: print("From sub1 {0}".format(x))
)
subject_test.subscribe(
   lambda x: print("From sub2 {0}".format(x))
)
test1 = of(1,2,3,4,5)
sub1 = test1.pipe(
   op.map(lambda a : a+random.random())
)
subscriber = sub1.subscribe(subject_test)

Produzione

E:\pyrx>python testrx.py
From sub1 1.1789422863284509
From sub2 1.1789422863284509
From sub1 2.5525627903260153
From sub2 2.5525627903260153
From sub1 3.4191549324778325
From sub2 3.4191549324778325
From sub1 4.644042420199624
From sub2 4.644042420199624
From sub1 5.079896897489065
From sub2 5.079896897489065

Se vedi, lo stesso valore è condiviso tra gli iscritti. È possibile ottenere lo stesso risultato utilizzando l'operatore osservabile collegabile publish ().