RxPy-예
이 장에서는 다음 주제에 대해 자세히 설명합니다.
- 옵저버 블, 연산자, 옵저버 구독의 작업을 보여주는 기본 예.
- 관찰 가능과 대상의 차이.
- 추위와 뜨거운 관측 물 이해하기.
아래에 옵저버 블, 오퍼레이터, 옵저버 구독의 작업을 보여주는 기본 예제가 있습니다.
예
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!"),
)
다음은이 URL에서 사용자 데이터를 가져 오는 매우 간단한 예입니다.
https://jsonplaceholder.typicode.com/users.데이터를 필터링하여 "C"로 시작하는 이름을 제공하고 나중에지도를 사용하여 이름 만 반환합니다. 다음은 동일한 결과입니다.
E:\pyrx\examples>python test.py
Got - Clementine Bauch
Got - Chelsey Dietrich
Got - Clementina DuBuque
Job Done!
관찰 가능과 주제의 차이점
이 예에서는 관찰 가능 항목과 대상의 차이를 확인할 수 있습니다.
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)))
산출
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
위의 예에서 Observable을 구독 할 때마다 새로운 값이 제공됩니다.
과목 예
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)
산출
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
값이 공유되는 경우 주제를 사용하는 두 구독자간에 공유됩니다.
Cold and Hot Observable 이해하기
관찰 가능 항목은 다음과 같이 분류됩니다.
- 콜드 옵저버 블
- 핫 옵저버 블
관찰 가능 항목의 차이는 여러 구독자가 구독 할 때 알 수 있습니다.
콜드 옵저버 블
콜드 옵저버 블은 실행되는 옵저버 블이며 구독 할 때마다 데이터를 렌더링합니다. 구독되면 Observable이 실행되고 새로운 값이 제공됩니다.
다음 예제는 추위 관찰 가능에 대한 이해를 제공합니다.
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)))
산출
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
위의 예에서 Observable을 구독 할 때마다 Observable을 실행하고 값을 내 보냅니다. 값은 위의 예에 표시된 것처럼 구독자마다 다를 수 있습니다.
핫 옵저버 블
hot observable의 경우 준비가되면 값을 내보내고 항상 구독을 기다리지는 않습니다. 값이 방출되면 모든 구독자가 동일한 값을 얻습니다.
Observable이 준비되었을 때 값이 방출되기를 원하거나 모든 구독자에게 동일한 값을 공유하고자 할 때 hot Observable을 사용할 수 있습니다.
핫 옵저버 블의 예는 주제와 연결 가능한 연산자입니다.
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)
산출
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
보시면 구독자간에 동일한 값이 공유됩니다. publish () 연결 가능한 관찰 가능 연산자를 사용하여 동일한 결과를 얻을 수 있습니다.