title: Django - run a function every x seconds
body: <p>I'm working on a Django app. I have an API endpoint, which if requested, must carry out a function that must be repeated a few times (until a certain condition is true). How I'm dealing with it right now is - </p>
  
  <pre><code>def shut_down(request):
    # Do some stuff
    while True:
      result = some_fn()
      if result:
        break
      time.sleep(2)
  
    return True
  </code></pre>
  
  <p>While I know that this is a terrible approach and that I shouldn't be blocking for 2 seconds, I can't figure out how to get around it. <br>
  This works, after say a wait of 4 seconds. But I'd like something that keeps the loop running in the background, and stop once some_fn returns True. (Also, it is certain that some_fn will return True)<br><br>
  <strong>EDIT -</strong><br> 
  Reading Oz123's response gave me an idea which seems to work. Here's what I did - <br></p>
  
  <pre><code>def shut_down(params):
      # Do some stuff
      # Offload the blocking job to a new thread
  
      t = threading.Thread(target=some_fn, args=(id, ), kwargs={})
      t.setDaemon(True)
      t.start()
  
      return True
  
  def some_fn(id):
      while True:
          # Do the job, get result in res
          # If the job is done, return. Or sleep the thread for 2 seconds before trying again.
  
          if res:
              return
          else:
              time.sleep(2)
  </code></pre>
  
  <p>This does the job for me. It's simple but I don't know how efficient multithreading is in conjunction with Django.<br>
  If anyone can point out pitfalls of this, criticism is appreciated. </p>