私はこの思い付いた:私はaiochannelが、通常asyncioを使用しています
{'rules': 'rule-1'}
{'rules': 'rule-1', 'snap': 'snapshot-1'}
{'rules': 'rule-1', 'snap': 'snapshot-1'}
....
:
async for item in combine_latest(rules=rulesgen, snap=snapgen):
print(item)
出力のようになります。そうは次のように
async def combine(**generators):
"""Given a bunch of async generators, merges the events from
all of them. Each should have a name, i.e. `foo=gen, bar=gen`.
"""
combined = Channel()
async def listen_and_forward(name, generator):
async for value in generator:
await combined.put({name: value})
for name, generator in generators.items():
asyncio.Task(listen_and_forward(name, generator))
async for item in combined:
yield item
async def combine_latest(**generators):
"""Like "combine", but always includes the latest value from
every generator.
"""
current = {}
async for value in combine(**generators):
current.update(value)
yield current
はそれを呼び出します.Queueもうまくいくはずです。
あなたは明確にすることはできますか?それは、両方のサブジェネレータが行うとき、またはどちらかがどちらのときにのみ得られますか? – Blckknght
@Blckknghtどちらかがそうであるとき。私がasyncioについてもっと学ぶほど、私はこれがうまくいくはずと確信が薄くなります。私はasyncioが私に仕事を使いたいと思っています。そして、どういうわけかこれらの関数の結果を待ち行列や並べ替えのチャンネルで伝えています。 – miracle2k