小编cha*_*eng的帖子

如何创建一个永远在其上运行滚动协同程序的事件循环?

为了防止上下文切换,我想创建一个大循环来同时服务于网络连接和一些例程.

这是正常功能的实现:

import asyncio
import time


def hello_world(loop):
    print('Hello World')
    loop.call_later(1, hello_world, loop)

def good_evening(loop):
    print('Good Evening')
    loop.call_later(1, good_evening, loop)

print('step: asyncio.get_event_loop()')
loop = asyncio.get_event_loop()

print('step: loop.call_soon(hello_world, loop)')
loop.call_soon(hello_world, loop)
print('step: loop.call_soon(good_evening, loop)')
loop.call_soon(good_evening, loop)

try:
    # Blocking call interrupted by loop.stop()
    print('step: loop.run_forever()')
    loop.run_forever()
except KeyboardInterrupt:
    pass
finally:
    print('step: loop.close()')
    loop.close()
Run Code Online (Sandbox Code Playgroud)

这是协同程序的实现:

import asyncio


@asyncio.coroutine
def hello_world():
    while True:
        yield from asyncio.sleep(1)
        print('Hello World')

@asyncio.coroutine
def good_evening():
    while True:
        yield from asyncio.sleep(1)
        print('Good Evening')

print('step: asyncio.get_event_loop()')
loop = asyncio.get_event_loop() …
Run Code Online (Sandbox Code Playgroud)

python asynchronous coroutine python-3.x python-asyncio

19
推荐指数
1
解决办法
3万
查看次数

如何链接多个RxJava的groupBy()方法,例如groupBy().groupBy()

给定输入:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud)

将数字分组为奇数或偶数,然后小于或大于5.

预期产量:

[[1, 3, 5], [2, 4], [6, 8, 10], [7, 9]]
Run Code Online (Sandbox Code Playgroud)

输出的顺序不受限制.

我现在使用以下方法:

Observable.range(1, 10)
    .groupBy(n -> n % 2 == 0)
    .flatMap((GroupedObservable<Boolean, Integer> g) -> {
        return Observable.just(g).flatMap(ObservableUtils.<Boolean, Integer>flatGroup()).groupBy(n -> n > 5);
    })
    .subscribe((final GroupedObservable<Boolean, Integer> g) -> {
        Observable.just(g).flatMap(ObservableUtils.<Boolean, Integer>flatGroup()).forEach(n -> println(g + ": " + n));
    });
Run Code Online (Sandbox Code Playgroud)

请注意,ObservableUtils是我编写的,用于简化代码.

但我对它并不满意,因为它还不够简单,只能表明目标.

我的期望如下:

Observable.range(1, 10)
    .groupBy(n -> n % 2 == 0)
    .groupBy(n -> n > 5) …
Run Code Online (Sandbox Code Playgroud)

java android reactive-programming rx-java

10
推荐指数
1
解决办法
8137
查看次数