def _get_layers(self):
"""
Wait for renderers to produce new layers, yields until at least one
layer is active.
"""
# schedule tasks to wait on each renderer queue
for r_idx in range(0, len(self.layers)):
layer = self.layers[r_idx]
if layer.waiter is None or layer.waiter.done():
layer.waiter = ensure_future(self._dequeue(r_idx))
# async wait for at least one completion
waiters = [layer.waiter for layer in self.layers]
if len(waiters) == 0:
return
await asyncio.wait(waiters, return_when=futures.FIRST_COMPLETED)
# check the rest without waiting
for r_idx in range(0, len(self.layers)):
layer = self.layers[r_idx]
if layer.waiter is not None and not layer.waiter.done():
self._dequeue_nowait(r_idx)
评论列表
文章目录