Python 为什么repeat(n)不适用于create-in-Reactive扩展
给予 747894597976 序列,而我希望每个数字都会重复6次Python 为什么repeat(n)不适用于create-in-Reactive扩展,python,reactivex,rx-py,Python,Reactivex,Rx Py,给予 747894597976 序列,而我希望每个数字都会重复6次 因此,“repeat”对使用create方法创建的可观察对象不起作用。发布的代码得到范围[51100]内的随机整数序列的6倍 试一试 from rx import Observable, Observer from __future__ import print_function import random def create_observable(observer): while True: obs
因此,“repeat”对使用create方法创建的可观察对象不起作用。发布的代码得到范围[51100]内的随机整数序列的6倍 试一试
from rx import Observable, Observer
from __future__ import print_function
import random
def create_observable(observer):
while True:
observer.on_next(random.randint(1,100))
Observable.create(create_observable).take_while(lambda x: x>50).repeat(6).subscribe(print)
或者只是
(Observable.create(create_observable)
.take_while(lambda x: x > 50)
.select_many(lambda x: Observable.just(x).repeat(6))
.subscribe(print))
问题在于
create
函数中的无限循环。无论何时订阅这样的可观察对象,它都会调用传递给create的函数,并且无法退出此循环。您的程序在这一点上卡住了,不再执行任何代码。你没有提到,但我想你必须强行终止它
在生成无限序列时,您必须检查订阅在每次迭代后是否处于活动状态。最简单、最安全的方法是使用Observable.generate()
函数:
(Observable.create(create_observable)
.take_while(lambda x: x > 50)
.select_many(lambda v: [v] * 6)
.subscribe(print))
您的代码prints@AndrewMatuk Disposable是
subscribe
方法返回的内容。我在生成器中输入了错误的初始值,take\u,而
没有通过,所以没有生成值。我已经把样品弄好了,自己也试过了。RxPY中似乎存在一个bug:
Observable.generate(random.randint(1, 100),
lambda x: True,
lambda x: random.randint(1, 100),
lambda x: x) \
.take_while(lambda x: x > 50) \
.repeat(6) \
.subscribe(print)