docstr: Make sure that futures are removed from the event list when they resolve
  
  Avoids delaying cleanup until the next send/recv event,
  which may never come.
code: def _remove_finished_future(future, event_list):
      """Make sure that futures are removed from the event list when they resolve
  
      Avoids delaying cleanup until the next send/recv event,
      which may never come.
      """
      for f_idx, event in enumerate(event_list):
          if event.future is future:
              break
      else:
          return
  
      # "future" instance is shared between sockets, but each socket has its own event list.
      event_list.remove(event_list[f_idx])
  
imports: import warnings
  from asyncio import Future
  from collections import deque
  from itertools import chain
  from typing import Any, Awaitable, Callable, Dict, List, NamedTuple, Optional, Tuple, Type, TypeVar, Union, cast, overload
  import zmq
  from zmq import EVENTS, POLLIN, POLLOUT
  from zmq._typing import Literal
label_desc: Use image node_id 19 for calling the _AsyncSocket obj's underlying member method code with example usage: obj._remove_finished_future(future, event_list) without return types