docs: def countdown(
      seconds=None,
      block=True,
      interval=1,
      daemon=True,
      tick_callback=None,
      finish_callback=None,
  ):
      """Run a countdown function to wait something, similar to threading.Timer,
       but will show the detail tick by tick_callback.
       ::
  
          from torequests.utils import countdown
  
          countdown(3)
          # 3 2 1 
          # countdown finished [3 seconds]: 2018-06-13 00:12:55 => 2018-06-13 00:12:58.
          countdown('2018-06-13 00:13:29')
          # 10 9 8 7 6 5 4 3 2 1 
          # countdown finished [10 seconds]: 2018-06-13 00:13:18 => 2018-06-13 00:13:28.
  """
  
      def default_tick_callback(s, seconds, *args):
          flush_print(s, sep="", end=" ")
  
      def default_finish_callback(seconds, start_time):
          flush_print()
  
      def cd(seconds, interval):
          for s in range(seconds, 0, -interval):
              tick_callback(s, seconds, interval)
              time.sleep(interval)
          if callable(finish_callback):
              finish_callback(seconds, start_time)
  
      start_time = time.time()
      tick_callback = tick_callback or default_tick_callback
      finish_callback = (
          default_finish_callback if finish_callback is None else finish_callback
      )
  
      if unicode(seconds).isdigit():
          seconds = int(seconds)
      elif isinstance(seconds, (unicode, str)):
          seconds = int(ptime(seconds) - time.time())
      t = Thread(target=cd, args=(seconds, interval))
      t.daemon = daemon
      t.start()
      if block:
          t.join()