gpt4 book ai didi

python - RxPy - 为什么排放与合并运算符交错?

转载 作者:行者123 更新时间:2023-11-30 22:48:18 25 4
gpt4 key购买 nike

所以我在学习 RxJava 和 RxKotlin 两年后正在学习 RxPy。我注意到的一件事是某些运算符会导致疯狂的交错,而这在 RxJava 中不会发生。

例如,对于简单的 Observable 源,flat_map() 将导致发射乱序交错。

items = Observable.from_( ("Alpha","Beta","Gamma","Delta","Epsilon"))

items.flat_map(lambda s: Observable.from_(list(s))).subscribe(print)

输出:

A
l
B
p
e
G
h
t
a
D
a
a
m
e
E
m
l
p
a
t
s
a
i
l
o
n

但是,使用 RxJava 或 RxKotlin,一切都保持连续且有序。

fun main(args: Array<String>) {
Observable.just("Alpha","Beta","Gamma","Delta","Epsilon")
.flatMap {
Observable.from(it.toCharArray().asIterable())
}.subscribe(::println)
}

输出:

A
l
p
h
a
B
e
t
a
G
a
m
m
a
D
e
l
t
a
E
p
s
i
l
o
n

我确认一切都在MainThread上运行,并且没有发生奇怪的异步调度(我认为)。

为什么 RxPy 会有这样的行为?我注意到这种情况几乎发生在任何处理多个 Observable 源合并在一起的操作符上。默认调度程序到底在做什么?

另外,为什么 RxPy 中没有 concat_map() ?我的印象是,这在某种程度上是不可能的……

最佳答案

正如已经指出的,flatMap 不保证顺序。 RxPy 没有将 concat_map 实现为不同的运算符,但您可以使用 mapconcat_all 运算符获得相同的效果

Observable.from_( ("Alpha","Beta","Gamma","Delta","Epsilon"))\
.map(lambda s: Observable.from_(list(s)))\
.concat_all()\
.subscribe(print)

关于python - RxPy - 为什么排放与合并运算符交错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40209773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com