RxPy - Ví dụ
Trong chương này, chúng ta sẽ thảo luận chi tiết về các chủ đề sau:
- Ví dụ cơ bản cho thấy hoạt động của người quan sát, người vận hành và đăng ký người quan sát.
- Sự khác biệt giữa có thể quan sát và chủ thể.
- Hiểu biết quan sát lạnh và nóng.
Dưới đây là một ví dụ cơ bản cho thấy hoạt động của người quan sát, người vận hành và đăng ký người quan sát.
Thí dụ
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!"),
)
Đây là một ví dụ rất đơn giản, trong đó, tôi đang lấy dữ liệu người dùng từ URL này -
https://jsonplaceholder.typicode.com/users.Lọc dữ liệu, để cung cấp các tên bắt đầu bằng "C" và sau đó sử dụng bản đồ để chỉ trả về các tên. Đây là đầu ra cho cùng một -
E:\pyrx\examples>python test.py
Got - Clementine Bauch
Got - Chelsey Dietrich
Got - Clementina DuBuque
Job Done!
Sự khác biệt giữa có thể quan sát và đối tượng
Trong ví dụ này, chúng ta sẽ thấy sự khác biệt giữa đối tượng có thể quan sát và đối tượng.
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)))
Đầu ra
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
Trong ví dụ trên, mỗi khi bạn đăng ký vào trang có thể quan sát, nó sẽ cung cấp cho bạn các giá trị mới.
Ví dụ chủ đề
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)
Đầu ra
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
Nếu bạn thấy các giá trị được chia sẻ, giữa cả hai người đăng ký sử dụng chủ đề.
Hiểu biết về vật quan sát lạnh và nóng
Một quan sát được phân loại là
- Có thể quan sát lạnh
- Có thể quan sát nóng
Sự khác biệt về khả năng quan sát sẽ được nhận thấy khi nhiều người đăng ký đang đăng ký.
Có thể quan sát lạnh
Các vật quan sát lạnh, có thể quan sát được thực thi và hiển thị dữ liệu mỗi khi nó được đăng ký. Khi nó được đăng ký, giá trị có thể quan sát được thực thi và các giá trị mới được đưa ra.
Ví dụ sau đây cung cấp sự hiểu biết về lạnh có thể quan sát được.
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)))
Đầu ra
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
Trong ví dụ trên, mỗi khi bạn đăng ký giá trị có thể quan sát, nó sẽ thực thi các giá trị có thể quan sát và phát ra. Các giá trị cũng có thể khác nhau từ người đăng ký này sang người đăng ký khác như thể hiện trong ví dụ trên.
Có thể quan sát nóng
Trong trường hợp quan sát được nóng, chúng sẽ phát ra các giá trị khi chúng sẵn sàng và không phải lúc nào cũng chờ đăng ký. Khi các giá trị được phát ra, tất cả những người đăng ký sẽ nhận được cùng một giá trị.
Bạn có thể sử dụng các giá trị có thể quan sát được khi bạn muốn các giá trị được phát ra khi có thể quan sát đã sẵn sàng hoặc bạn muốn chia sẻ các giá trị giống nhau cho tất cả người đăng ký của mình.
Một ví dụ về các toán tử có thể quan sát được là Chủ đề và các toán tử có thể kết nối.
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)
Đầu ra
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
Nếu bạn thấy, giá trị giống nhau được chia sẻ giữa những người đăng ký. Bạn có thể đạt được điều tương tự bằng cách sử dụng toán tử quan sát có thể kết nối xuất bản ().