RxPY-주제 작업
주제는 관찰 가능한 시퀀스 일뿐만 아니라 멀티 캐스트 할 수있는 관찰자입니다. 즉, 구독 한 많은 관찰자와 대화 할 수 있습니다.
주제에 대해 다음 주제를 논의 할 것입니다.
- 주제 만들기
- 주제 구독
- 주제에 데이터 전달
- BehaviorSubject
- ReplaySubject
- AsyncSubject
주제 만들기
주제로 작업하려면 아래와 같이 주제를 가져와야합니다.
from rx.subject import Subject
다음과 같이 주제 객체를 만들 수 있습니다.
subject_test = Subject()
객체는 세 가지 방법이있는 관찰자입니다.
- on_next(value)
- on_error (error) 및
- on_completed()
주제 구독
다음과 같이 주제에 대해 여러 구독을 만들 수 있습니다.
subject_test.subscribe(
lambda x: print("The value is {0}".format(x))
)
subject_test.subscribe(
lambda x: print("The value is {0}".format(x))
)
주제에 데이터 전달
아래와 같이 on_next (value) 메서드를 사용하여 생성 된 주제에 데이터를 전달할 수 있습니다.
subject_test.on_next("A")
subject_test.on_next("B")
데이터는 주제에 추가 된 모든 구독으로 전달됩니다.
여기에 주제의 작동 예가 있습니다.
예
from rx.subject import Subject
subject_test = Subject()
subject_test.subscribe(
lambda x: print("The value is {0}".format(x))
)
subject_test.subscribe(
lambda x: print("The value is {0}".format(x))
)
subject_test.on_next("A")
subject_test.on_next("B")
subject_test 객체는 Subject ()를 호출하여 생성됩니다. subject_test 객체에는 on_next (value), on_error (error) 및 on_completed () 메서드에 대한 참조가 있습니다. 위 예의 출력은 다음과 같습니다.
산출
E:\pyrx>python testrx.py
The value is A
The value is A
The value is B
The value is B
on_completed () 메서드를 사용하여 아래와 같이 주제 실행을 중지 할 수 있습니다.
예
from rx.subject import Subject
subject_test = Subject()
subject_test.subscribe(
lambda x: print("The value is {0}".format(x))
)
subject_test.subscribe(
lambda x: print("The value is {0}".format(x))
)
subject_test.on_next("A")
subject_test.on_completed()
subject_test.on_next("B")
complete를 호출하면 나중에 호출되는 다음 메서드가 호출되지 않습니다.
산출
E:\pyrx>python testrx.py
The value is A
The value is A
이제 on_error (error) 메서드를 호출하는 방법을 살펴 보겠습니다.
예
from rx.subject import Subject
subject_test = Subject()
subject_test.subscribe(
on_error = lambda e: print("Error : {0}".format(e))
)
subject_test.subscribe(
on_error = lambda e: print("Error : {0}".format(e))
)
subject_test.on_error(Exception('There is an Error!'))
산출
E:\pyrx>python testrx.py
Error: There is an Error!
Error: There is an Error!
행동 주제
BehaviorSubject는 호출시 최신 값을 제공합니다. 아래와 같이 행동 주제를 만들 수 있습니다.
from rx.subject import BehaviorSubject
behavior_subject = BehaviorSubject("Testing Behaviour Subject"); // initialized the behaviour subject with value:Testing Behaviour Subject
다음은 Behavior Subject를 사용하는 작업 예제입니다.
예
from rx.subject import BehaviorSubject
behavior_subject = BehaviorSubject("Testing Behaviour Subject");
behavior_subject.subscribe(
lambda x: print("Observer A : {0}".format(x))
)
behavior_subject.on_next("Hello")
behavior_subject.subscribe(
lambda x: print("Observer B : {0}".format(x))
)
behavior_subject.on_next("Last call to Behaviour Subject")
산출
E:\pyrx>python testrx.py
Observer A : Testing Behaviour Subject
Observer A : Hello
Observer B : Hello
Observer A : Last call to Behaviour Subject
Observer B : Last call to Behaviour Subject
재생 주제
replaysubject는 행동 주체와 유사하며, 값을 버퍼링하고 새 구독자에게 동일하게 재생할 수 있습니다. 다음은 리플레이 주제의 작동 예입니다.
예
from rx.subject import ReplaySubject
replay_subject = ReplaySubject(2)
replay_subject.subscribe(lambda x: print("Testing Replay Subject A: {0}".format(x)))
replay_subject.on_next(1)
replay_subject.on_next(2)
replay_subject.on_next(3)
replay_subject.subscribe(lambda x: print("Testing Replay Subject B: {0}".format(x)));
replay_subject.on_next(5)
사용 된 버퍼 값은 재생 주제에서 2입니다. 따라서 마지막 두 값은 버퍼링되어 호출 된 새 구독자에 사용됩니다.
산출
E:\pyrx>python testrx.py
Testing Replay Subject A: 1
Testing Replay Subject A: 2
Testing Replay Subject A: 3
Testing Replay Subject B: 2
Testing Replay Subject B: 3
Testing Replay Subject A: 5
Testing Replay Subject B: 5
AsyncSubject
AsyncSubject의 경우 마지막으로 호출 된 값이 구독자에게 전달되고 complete () 메서드가 호출 된 후에 만 수행됩니다.
예
from rx.subject import AsyncSubject
async_subject = AsyncSubject()
async_subject.subscribe(lambda x: print("Testing Async Subject A: {0}".format(x)))
async_subject.on_next(1)
async_subject.on_next(2)
async_subject.on_completed()
async_subject.subscribe(lambda x: print("Testing Async Subject B: {0}".format(x)))
Here, before complete is called, the last value passed to the subject is 2, and the same is given to the subscribers.
산출
E:\pyrx>python testrx.py
Testing Async Subject A: 2
Testing Async Subject B: 2