code: def async_pull(
      self,
      src: Tensor,
      offset: Optional[Tensor],
      count: Optional[Tensor],
      index: Tensor,
  ) -> None:
      # Start pulling `src` at ([offset, count] and index positions:
      self._pull_index = (self._pull_index + 1) % self.pool_size
      data = (self._pull_index, src, offset, count, index)
      self._pull_queue.append(data)
      if len(self._pull_queue) <= self.pool_size:
          self._async_pull(self._pull_index, src, offset, count, index)
  
imports: from typing import Optional, Callable
  import torch
  from torch import Tensor
  from torch.cuda import Stream
  from dig_ext.sync import synchronize, read_async, write_async
label_desc: Use image node_id 7 for calling the AsyncIOPool obj's underlying member method code with example usage: obj.async_pull(src, offset, count, index) without return types