I'm trying to run two `autobahn.asyncio.wamp.ApplicationSession`s in python at the same time. Previously, I did this using a modification of the autobahn library as suggested in [this post's answer](https://stackoverflow.com/questions/38298548/multiple-thread-with-autobahn-applicationrunner-and-applicationsession). I now
require a bit more professional solution. 

After googling about for a while, [this post appeared quite promising](https://stackoverflow.com/questions/28414302/how-create-a-python-application-with-two-thread-each-which-has-a-autobahn-applic), but uses the `twisted` library, instead of `asyncio`. I wasn't able to identify a similar solution for the `asyncio` branch of the `autobahn` library, since it doesn't appear to be using `Reactors`.

The main problem I have, is that `ApplicationRunner.run()` is blocking (which is why I previously outsourced it to a thread), so I can't just run a second `ApplicationRunner` after it. 

I do need to access 2 websocket channels at the same time, which I cannot appear to do with a single `ApplicationSession`.

My Code so far:

```
from autobahn.asyncio.wamp import ApplicationSession
from autobahn.asyncio.wamp import ApplicationRunner
from asyncio import coroutine
import time

channel1 = 'BTC_LTC'
channel2 = 'BTC_XMR'

class LTCComponent(ApplicationSession):

    def onConnect(self):
        self.join(self.config.realm)

    @coroutine
    def onJoin(self, details):
        def onTicker(*args, **kwargs):
            print('LTCComponent', args, kwargs)

        try:
            yield from self.subscribe(onTicker, channel1)
        except Exception as e:
            print("Could not subscribe to topic:", e)

class XMRComponent(ApplicationSession):

    def onConnect(self):
        self.join(self.config.realm)

    @coroutine
    def onJoin(self, details):
        def onTicker(*args, **kwargs):
            print('XMRComponent', args, kwargs)

        try:
            yield from self.subscribe(onTicker, channel2)
        except Exception as e:
            print("Could not subscribe to topic:", e)

def main():
    runner = ApplicationRunner("wss://api.poloniex.com:443", "realm1", extra={})
    runner.run(LTCComponent)
    runner.run(XMRComponent) # <- is not being called

if __name__ == "__main__":

    try:
        main()
    except KeyboardInterrupt:
        quit()

    except Exception as e:
        print(time.time(), e)

```

My knowledge of the `autobahn` library is limited, and I'm afraid the documentation isn't improving my situation much. Am I overlooking something here? A function, a parameter, which would enable me to either compound my components or run them both at once?

Perhaps a similar solution as [provided here](https://stackoverflow.com/questions/28414302/how-create-a-python-application-with-two-thread-each-which-has-a-autobahn-applic), which implements an alternative `ApplicationRunner` ?

---

Related Topics

[Running two ApplicationSessions in twisted](https://stackoverflow.com/questions/28414302/how-create-a-python-application-with-two-thread-each-which-has-a-autobahn-applic)

[Running Autobahn ApplicationRunner in Thread](https://stackoverflow.com/questions/38298548/multiple-thread-with-autobahn-applicationrunner-and-applicationsession)

[Autobahn.wamp.ApplicationSession Source](http://autobahn.ws/python/_modules/autobahn/wamp/protocol.html#ApplicationSession)

[Autobahn.wamp.Applicationrunner Source](http://autobahn.ws/python/_modules/autobahn/asyncio/wamp.html#ApplicationRunner)

---

As Requested, the Traceback from @stovfl's answer using `multithreading` code: 

```
Exception in thread Thread-2:
Traceback (most recent call last):
  File "/home/nils/anaconda3/lib/python3.5/threading.py", line     914, in _bootstrap_inner
    self.run()
  File "/home/nils/git/tools/gemini_wss/t2.py", line 27, in run
    self.appRunner.run(self.__ApplicationSession)
  File "/home/nils/anaconda3/lib/python3.5/site-packages/autobahn-    0.14.1-py3.5.egg/autobahn/asyncio/wamp.py", line 143,     in run
    transport_factory = WampWebSocketClientFactory(create,         url=self.url,                 serializers=self.serializers)
  File "/home/nils/anaconda3/lib/python3.5/site-packages/autobahn-    0.14.1-py3.5.egg/autobahn/asyncio/websocket.py", line     319, in __init__
    WebSocketClientFactory.__init__(self, *args, **kwargs)
  File "/home/nils/anaconda3/lib/python3.5/site-packages/autobahn-    0.14.1-py3.5.egg/autobahn/asyncio/websocket.py", line     268, in __init__
    self.loop = loop or asyncio.get_event_loop()
  File "/home/nils/anaconda3/lib/python3.5/asyncio/events.py",     line 626, in get_event_loop
    return get_event_loop_policy().get_event_loop()
  File "/home/nils/anaconda3/lib/python3.5/asyncio/events.py",     line 572, in get_event_loop
    % threading.current_thread().name)
RuntimeError: There is no current event loop in thread 'Thread-2'.
Exception in thread Thread-1:
**Same as in Thread-2**
...
RuntimeError: There is no current event loop in thread 'Thread-1'.

```