title: Python - Running Autobahn|Python asyncio websocket server in a separate subprocess or thread
body: <p>I have a tkinter based GUI program running in Python 3.4.1. I have several threads running in the program to get JSON data from various urls. I am wanting to add some WebSocket functionality to be able to allow program to act as a server and allow several clients to connect to it over a WebSocket and exchange other JSON data.</p>
  
  <p>I am attempting to use the Autobahn|Python WebSocket server for asyncio.</p>
  
  <p>I first tried to run the asyncio event loop in a separate thread under the GUI program. However, every attempt gives 'AssertionError: There is no current event loop in thread 'Thread-1'.</p>
  
  <p>I then tried spawning a process with the standard library multiprocessing package that ran the asyncio event loop in another Process. When I try this I don't get any exception but the WebSocket server doesn't start either. </p>
  
  <p>Is it even possible to run an asyncio event loop in a subprocess from another Python program?</p>
  
  <p>Is there even a way to integrate an asyncio event loop into a currently multithreaded/tkinter program?</p>
  
  <p><strong>UPDATE</strong>
  Below is the actual code I am trying to run for an initial test.</p>
  
  <pre><code>from autobahn.asyncio.websocket import WebSocketServerProtocol
  from autobahn.asyncio.websocket import WebSocketServerFactory
  import asyncio
  from multiprocessing import Process
  
  class MyServerProtocol(WebSocketServerProtocol):
  
     def onConnect(self, request):
        print("Client connecting: {0}".format(request.peer))
  
     def onOpen(self):
        print("WebSocket connection open.")
  
     def onMessage(self, payload, isBinary):
        if isBinary:
           print("Binary message received: {0} bytes".format(len(payload)))
  
        else:
           print("Text message received: {0}".format(payload.decode('utf8')))
  
        ## echo back message verbatim
        self.sendMessage(payload, isBinary)
  
     def onClose(self, wasClean, code, reason):
        print("WebSocket connection closed: {0}".format(reason))
  
  def start_server():
     factory = WebSocketServerFactory("ws://10.241.142.27:6900", debug = False)
     factory.protocol = MyServerProtocol
     loop = asyncio.get_event_loop()
     coro = loop.create_server(factory, '10.241.142.27', 6900)
     server = loop.run_until_complete(coro)
     loop.run_forever()
     server.close()
     loop.close()
  
  
  websocket_server_process = Process(target = start_server)
  websocket_server_process.start()
  </code></pre>
  
  <p>Most of it is straight from the Autobahn|Python example code for asyncio. If I try to run it as a Process it doesn't do anything, no client can connect to it, if I run netstat -a there is no port 6900 being used. If just use start_server() in the main program it creates the WebSocket Server.</p>