如何将zerorpc作为greenlet运行?

时间:2013-10-06 11:48:30

标签: 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")
gevent.spawn(s.run)

# More code and greenlets started.
# ...

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

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

这是最好的方法。

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

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