Python 如何将zerorpc作为greenlet运行?

Python 如何将zerorpc作为greenlet运行?,python,zeromq,gevent,Python,Zeromq,Gevent,我希望将zeroRPC服务器作为greenlet运行,并在同一循环中使用其他gevent greenlet。 ZeroRPC的文档有点简单。 这是启动zeroRPC服务器的建议方法: s = zerorpc.Server(Cooler()) s.bind("tcp://0.0.0.0:4242") s.run() 要将服务器作为greenlet运行,我将运行包装在greenlet中: s = zerorpc.Server(Cooler()) s.bind("tcp://0.0.0.0:4242

我希望将zeroRPC服务器作为greenlet运行,并在同一循环中使用其他gevent greenlet。 ZeroRPC的文档有点简单。 这是启动zeroRPC服务器的建议方法:

s = zerorpc.Server(Cooler())
s.bind("tcp://0.0.0.0:4242")
s.run()
要将服务器作为greenlet运行,我将运行包装在greenlet中:

s = zerorpc.Server(Cooler())
s.bind("tcp://0.0.0.0:4242")
gevent.spawn(s.run)

# More code and greenlets started.
# ...
但考虑到zeroRPC已经基于gevent,并且gevent框架中的其他服务器具有非阻塞启动方法,这似乎有点尴尬


有更好的方法吗?

这是最好的方法

.run()方法将负责设置(zerorpc)服务器,根据需要生成和管理任何子Greenlet。这有效地创建了一个greenlet树,将所有致命错误返回到.run()方法。zerorpc服务器将在一个新的greenlet中运行任何传入的请求,该greenlet是从.run()方法拥有的greenlet树中派生出来的


使用blocking.run()方法可以通过简单的try/catch处理.run()引发的错误。此外,当.run()返回时,表示zerorpc服务器完全停止。例如,当您从另一个greenlet调用.stop()时,zerorpc服务器将停止接受新请求,并在从.run()返回之前完成对活动请求的处理。这是最好的方法

.run()方法将负责设置(zerorpc)服务器,根据需要生成和管理任何子Greenlet。这有效地创建了一个greenlet树,将所有致命错误返回到.run()方法。zerorpc服务器将在一个新的greenlet中运行任何传入的请求,该greenlet是从.run()方法拥有的greenlet树中派生出来的

使用blocking.run()方法可以通过简单的try/catch处理.run()引发的错误。此外,当.run()返回时,表示zerorpc服务器完全停止。例如,当您从另一个greenlet调用.stop()时,zerorpc服务器将停止接受新请求,并在从.run()返回之前完成对活动请求的处理