python-难以理解Majordomo API,pyzmq-mdp的工作方式
作者:互联网
我希望使用Majordomo API,pyzmq-mdp.客户端存储库中的example是我不太了解的东西.
该示例在myclient.py中,无需使用MDPClient API即可手动创建套接字.更糟糕的是,mdp_request方法用于发出请求.但是到目前为止,我已经尝试过了:
class Client(MDPClient):
def on_timeout(self):
print "Client Timed out."
def main():
context = zmq.Context()
mdp_client = Client(context, "tcp://127.0.0.1:8888", SERVICE)
try:
mdp_client.request(["hello"], timeout=5000)
except RequestTimeout:
print "Timed Out."
if __name__ == '__main__':
main()
我只运行客户端.没有经纪人.但这并没有引发RequestTimeout异常.我有以下疑问:
>为什么示例没有实现MDPClient API?
>如果有可用的请求方法,mdp_request方法的目的是什么?
>我的方法有什么问题?
我是否缺少明显的东西?请一些指导.
解决方法:
根据您的问题:
What is the purpose of mdp_request method when there is a request method available?
如code所示:
mdp_request是同步MDP请求
MDPClient类是zmq.REQ套接字的异步封装,旨在集成到pyzmq的异步IOLoop中.
What is wrong with my approach?
我在同一个问题上挣扎.检查test_client.py之后,我可以使用以下示例解决该问题:
import zmq
from zmq.eventloop.ioloop import IOLoop
from mdp.client import MDPClient
class MyClient(MDPClient):
def on_message(self, msg):
print("Received:", repr(msg))
IOLoop.instance().stop()
return
def on_timeout(self):
print('TIMEOUT!')
IOLoop.instance().stop()
return
if __name__ == '__main__':
context = zmq.Context()
client = MyClient(context, 'tcp://127.0.0.1:5555', b'echo')
client.request(b'Hello world', timeout=3000)
IOLoop.instance().start()
client.shutdown()
标签:zeromq,pyzmq,python 来源: https://codeday.me/bug/20191122/2061377.html