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
ในตัวอย่างข้างต้นทุกครั้งที่คุณสมัครรับข้อมูลที่สังเกตได้จะให้ค่าใหม่แก่คุณ
ตัวอย่างเรื่อง
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
หากคุณเห็นค่าจะถูกแชร์ระหว่างสมาชิกทั้งสองโดยใช้หัวเรื่อง
การทำความเข้าใจกับ Observables ที่เย็นและร้อน
สิ่งที่สังเกตได้ถูกจัดประเภทเป็น
- หอสังเกตการณ์เย็น
- หอสังเกตการณ์ร้อน
ความแตกต่างของสิ่งที่สังเกตได้จะสังเกตเห็นได้เมื่อมีสมาชิกหลายคนสมัครสมาชิก
หอสังเกตการณ์เย็น
Cold observables เป็นสิ่งที่สังเกตได้ซึ่งถูกเรียกใช้งานและแสดงผลข้อมูลทุกครั้งที่สมัครสมาชิก เมื่อสมัครรับข้อมูลค่าที่สังเกตได้จะถูกเรียกใช้และจะได้รับค่าใหม่
ตัวอย่างต่อไปนี้ให้ความเข้าใจเกี่ยวกับความเย็นที่สังเกตได้
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
ในตัวอย่างข้างต้นทุกครั้งที่คุณสมัครรับข้อมูลที่สังเกตได้มันจะเรียกใช้ค่าที่สังเกตได้และปล่อยค่าออกมา ค่าอาจแตกต่างกันไปในแต่ละสมาชิกกับผู้สมัครสมาชิกดังที่แสดงในตัวอย่างด้านบน
หอสังเกตการณ์ร้อน
ในกรณีที่สังเกตได้อย่างร้อนแรงพวกเขาจะปล่อยค่าออกมาเมื่อพร้อมและจะไม่รอการสมัครสมาชิกเสมอไป เมื่อมีการแสดงค่าสมาชิกทั้งหมดจะได้รับค่าเดียวกัน
คุณสามารถใช้ประโยชน์จากค่าที่สังเกตได้เมื่อคุณต้องการให้ค่าถูกปล่อยออกมาเมื่อสิ่งที่สังเกตได้พร้อมหรือคุณต้องการแบ่งปันค่าเดียวกันกับสมาชิกทั้งหมดของคุณ
ตัวอย่างของ hot สังเกตได้คือ Subject และตัวดำเนินการที่เชื่อมต่อได้
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
หากคุณเห็นจะมีการแบ่งปันค่าเดียวกันระหว่างสมาชิก คุณสามารถบรรลุสิ่งเดียวกันได้โดยใช้โอเปอเรเตอร์ที่สังเกตได้ที่สามารถเชื่อมต่อได้