我希望将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框架中的其他服务器都有一个非阻塞的启动方法,这看起来有点笨拙。
有没有更好的方法来做这件事?
发布于 2014-01-16 04:17:57
这是最好的方法。
.run()方法将负责设置(zerorpc)服务器,根据需要生成和管理任何子greenlet。这将有效地创建一棵greenlet树,并将所有致命错误返回给.run()方法。zerorpc服务器将在一个新的greenlet中运行任何传入的请求,该greenlet是由.run()方法拥有的greenlet树生成的。
通过使用阻塞的.run()方法,您可以使用简单的try/catch来处理.run()引发的错误。此外,当.run()返回时,意味着zerorpc服务器完全停止。例如,当您从另一个greenlet调用.stop()时,zerorpc服务器将停止接受新请求,并在从.run()返回之前完成对活动请求的处理。
https://stackoverflow.com/questions/19208535
复制相似问题