[英]How to run zerorpc as a greenlet?
我想在同一循环中将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树中产生的。
具有阻塞的.run()方法使您可以通过简单的try / catch处理.run()引发的错误。 此外,当.run()返回时,表示Zerorpc服务器已完全停止。 例如,当您从另一个greenlet调用.stop()时,zerorpc服务器将停止接受新请求并完成处理活动请求,然后再从.run()返回
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.