title: Address already in use when running flask in another process
body: <p>I'm working on a camera endpoint for an IoT application and I want to start and stop a flask app on command to show a webpage with streaming camera data.  I have all the individual pieces working but it's failing when I put them together.</p>
  
  <p>If I start a flask process after starting another thread it complains that address is already in use.  Here's a stripped down example:</p>
  
  <pre><code>#!/usr/bin/env python3
  
  import os
  import threading
  from flask import Flask
  import socket
  import time
  from multiprocessing import Process
  
  app = Flask(__name__)
  
  def main():
      start_thread(udp_listener)
      start_process(runflask)
  
      while True:
          time.sleep(1)
  
  def start_thread(function, arguments=()):
      th = threading.Thread(target=function, args=arguments)
      th.daemon = True
      th.start()
  
  def start_process(function):
      server = Process(target=function)
      server.start()
      while True:
          time.sleep(60)
      server.terminate()
      server.join()
  
  def udp_listener():
      while True:
          with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
              s.bind(('', 9000))
              print('udp listening on port 9000')
              while True:
                  data, server = s.recvfrom(4069)
                  print('received:')
  
  def runflask():
      app.run(host='0.0.0.0', port=8001, debug=True)
  
  if __name__ == "__main__":
      main()
  </code></pre>
  
  <p>Comment out start_thread() and just run start_process() and it's ok.
  Comment out start_process() and just run start_thread() and it's ok.
  Run both and get an address already in use error even though they're listening on different ports.</p>
  
  <pre><code>Exception in thread Thread-1:
  Traceback (most recent call last):
  File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
      self.run()
  File "/usr/lib/python3.5/threading.py", line 862, in run
      self._target(*self._args, **self._kwargs)
  File "./webcam_test.py", line 35, in udp_listener
      s.bind(('', 9000))
  OSError: [Errno 98] Address already in use
  </code></pre>
  
  <p>I want to run the flask app in a way that will let me start and stop it on command.  Should I be doing it a different way?</p>