Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当多个输入同时勾选时,如何防止联合收割机触发多次?_Python_Reactive Programming_Rx Py - Fatal编程技术网

Python 当多个输入同时勾选时,如何防止联合收割机触发多次?

Python 当多个输入同时勾选时,如何防止联合收割机触发多次?,python,reactive-programming,rx-py,Python,Reactive Programming,Rx Py,每当有输入时,我都使用“执行操作”。问题是如果多个输入同时勾选,combine\u latest在每个输入勾选后多次激发。这会引起头痛,因为combine\u latest实际上是在用过时的值进行错误的滴答 最小工作示例其中快速可观察到的滴答声每10ms一次,而慢速可观察到的滴答声每30ms一次: from rx.concurrency import HistoricalScheduler from rx import Observable from __future__ import prin

每当有输入时,我都使用“执行操作”。问题是如果多个输入同时勾选,
combine\u latest
在每个输入勾选后多次激发。这会引起头痛,因为
combine\u latest
实际上是在用过时的值进行错误的滴答

最小工作示例其中
快速
可观察到的滴答声每10ms一次,而
慢速
可观察到的滴答声每30ms一次:

from rx.concurrency import HistoricalScheduler
from rx import Observable
from __future__ import print_function

scheduler = HistoricalScheduler(initial_clock=1000)
fast = Observable.generate_with_relative_time(1, lambda x: True, lambda x: x + 1, lambda x: x, lambda x: 10, scheduler=scheduler)
slow = Observable.generate_with_relative_time(3, lambda x: True, lambda x: x + 3, lambda x: x, lambda x: 30, scheduler=scheduler)
Observable.combine_latest(fast, slow, lambda x, y: dict(time=scheduler.now(), fast=x, slow=y)).subscribe(print)
scheduler.advance_to(1100)
每30毫秒,当同时勾选快和慢时,
combine\u latest
不希望地触发两次,输出如下:

{'slow': 3, 'fast': 2, 'time': 1030}  # <- This shouldn't be here
{'slow': 3, 'fast': 3, 'time': 1030}
{'slow': 3, 'fast': 4, 'time': 1040}
{'slow': 3, 'fast': 5, 'time': 1050}
{'slow': 6, 'fast': 5, 'time': 1060}  # <- This shouldn't be here
{'slow': 6, 'fast': 6, 'time': 1060}
{'slow': 6, 'fast': 7, 'time': 1070}
{'slow': 6, 'fast': 8, 'time': 1080}
{'slow': 9, 'fast': 8, 'time': 1090}  # <- This shouldn't be here
{'slow': 9, 'fast': 9, 'time': 1090}
{'slow': 9, 'fast': 10, 'time': 1100}

{'slow':3,'fast':2,'time':1030}

我认为
debounce
正是你想要的:

---A-B-C-----D------E-F----|->
  [debounce(some_interval)]
--------C-----D--------F---|->
在获得值
a
后,
debounce
将等待
一段时间间隔。如果出现另一个值
B
,它将发出
B
。因此,您可以对输入流进行去抖动,这将“捕获”这些额外的点击,并只发出最后一次


(这个问题很久以前就提出了,但我现在为未来的谷歌回答。)

没有被接受的答案,所以从技术上讲不是重复的,但有可能有用的答案。你能在你的情况下使用
和latest from
吗?请看下面的一篇博客文章对此进行了解释: