docs: def monitor_counters(mc, output, counters, detailed, f):
      """Monitor the counters on a specified machine, taking a snap-shot every
      time the generator 'f' yields."""
      # Print CSV header
      output.write("time,{}{}\n".format("x,y," if detailed else "",
                                        ",".join(counters)))
  
      system_info = mc.get_system_info()
  
      # Make an initial sample of the counters
      last_counter_values = sample_counters(mc, system_info)
  
      start_time = time.time()
  
      for _ in f():
          # Snapshot the change in counter values
          counter_values = sample_counters(mc, system_info)
          delta = deltas(last_counter_values, counter_values)
          last_counter_values = counter_values
  
          now = time.time() - start_time
  
          # Output the changes
          if detailed:
              for x, y in sorted(system_info):
                  output.write("{:0.1f},{},{},{}\n".format(
                      now, x, y,
                      ",".join(str(getattr(delta[(x, y)], c))
                               for c in counters)))
          else:
              totals = [0 for _ in counters]
              for xy in sorted(system_info):
                  for i, counter in enumerate(counters):
                      totals[i] += getattr(delta[xy], counter)
              output.write("{:0.1f},{}\n".format(
                  now, ",".join(map(str, totals))))