<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _IterateAllClients(recency_window=None):
 """Fetches client data from the relational db. Args: recency_window: An rdfvalue.Duration specifying a window of last-ping timestamps to consider. Clients that haven't communicated with GRR servers longer than the given period will be skipped. If recency_window is None, all clients will be iterated. Yields: Batches (lists) of ClientFullInfo objects. """

  if recency_window is None:
    min_last_ping = None
  else:
    min_last_ping = rdfvalue.RDFDatetime.Now() - recency_window
  client_ids = data_store.REL_DB.ReadAllClientIDs(min_last_ping=min_last_ping)
  for client_id_batch in collection.Batch(client_ids, CLIENT_READ_BATCH_SIZE):
    client_info_dict = data_store.REL_DB.MultiReadClientFullInfo(
        client_id_batch)
    yield list(itervalues(client_info_dict))