Python 为什么repeat(n)不适用于create-in-Reactive扩展

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

给予

747894597976

序列,而我希望每个数字都会重复6次


因此,“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)