Python 具有Autobahn、ApplicationRunner和ApplicationSession的多线程

Python 具有Autobahn、ApplicationRunner和ApplicationSession的多线程,python,multithreading,python-3.x,twisted,Python,Multithreading,Python 3.x,Twisted,我试图通过上面的两个链接解决我的问题,但我没有 我有以下错误:RuntimeError:线程“thread-1”中没有当前事件循环。 下面是代码示例(python 3): 因此,我的最终目标是在开始时启动两个线程。只有一个需要使用ApplicationSession和ApplicationRunner。谢谢。一个单独的线程必须有自己的事件循环。因此,如果poloniex_worker需要侦听websocket,它需要自己的事件循环: def poloniex_worker(): asyn

我试图通过上面的两个链接解决我的问题,但我没有

我有以下错误:RuntimeError:线程“thread-1”中没有当前事件循环。

下面是代码示例(python 3):


因此,我的最终目标是在开始时启动两个线程。只有一个需要使用ApplicationSession和ApplicationRunner。谢谢。

一个单独的线程必须有自己的事件循环。因此,如果poloniex_worker需要侦听websocket,它需要自己的事件循环:

def poloniex_worker():
    asyncio.set_event_loop(asyncio.new_event_loop())
    runner = ApplicationRunner("wss://api.poloniex.com:443", "realm1")
    runner.run(PoloniexWebsocket)
但是,如果您在Unix计算机上,如果尝试这样做,您将面临另一个错误。Autobahn asyncio使用Unix信号,但这些Unix信号仅在主线程中工作。如果您不打算使用Unix信号,可以简单地将其关闭。为此,必须转到定义ApplicationRunner的文件。这就是我机器上python3.5>站点包>高速公路>异步IO中的wamp.py。您可以这样注释代码的信号处理部分:

# try:
#     loop.add_signal_handler(signal.SIGTERM, loop.stop)
# except NotImplementedError:
#     # signals are not available on Windows
#     pass
所有这些都是大量的工作。如果您不一定需要在主线程之外的单独线程中运行ApplicationSession,那么最好只在主线程中运行ApplicationSession

# try:
#     loop.add_signal_handler(signal.SIGTERM, loop.stop)
# except NotImplementedError:
#     # signals are not available on Windows
#     pass