Do not deadlock single-threaded agents with complex dataset iterator logic (interleaving, filtering, grouping...). The logic is as follows: - Adder is wrapped in a _TrainingAdder which tries to execute training step before adding more experience to Reverb. - Training step is executed as long as there is data in the iterator. - Otherwise, if any of the table's rate limiters would block the insert, _TrainingAdder sleeps waiting for iterator to fetch more data from the table. As a result, either training step should be possible or table should have capacity for more data.
Do not deadlock single-threaded agents with complex dataset iterator logic (interleaving, filtering, grouping...). The logic is as follows:
- Adder is wrapped in a _TrainingAdder which tries to execute training step before adding more experience to Reverb.
- Training step is executed as long as there is data in the iterator.
- Otherwise, if any of the table's rate limiters would block the insert, _TrainingAdder sleeps waiting for iterator to fetch more data from the table. As a result, either training step should be possible or table should have capacity for more data.

PiperOrigin-RevId: 452783668
Change-Id: I0f7ffddcfd073146eac26d3bc0bd3710a2496faa

deepmind/acme,deepmind/acme