| 707 | |
| 708 | |
| 709 | class _ThreadSafeQueue(Generic[_Type]): |
| 710 | def __init__(self) -> None: |
| 711 | self._loop = get_running_loop() |
| 712 | self._queue: Queue[_Type] = Queue() |
| 713 | self._pending: set[_Type] = set() |
| 714 | |
| 715 | def put(self, value: _Type) -> None: |
| 716 | if value not in self._pending: |
| 717 | self._pending.add(value) |
| 718 | self._loop.call_soon_threadsafe(self._queue.put_nowait, value) |
| 719 | |
| 720 | async def get(self) -> _Type: |
| 721 | value = await self._queue.get() |
| 722 | self._pending.remove(value) |
| 723 | return value |
| 724 | |
| 725 | |
| 726 | def _get_children_info(children: list[VdomChild]) -> Sequence[_ChildInfo]: |