12.10.6 将调用组合在一个消息中
多调用(multicall)是对XML-RPC协议的一个扩展,允许同时发送多个调用,并收集响应,返回给调用者。
import xmlrpc.client
server = xmlrpc.client.ServerProxy('http://localhost:9000')
multicall = xmlrpc.client.MultiCall(server)
multicall.ping()
multicall.show_type(1)
multicall.show_type('string')
for i,r in enumerate(multicall()):
print(i,r)
要使用一个MultiCall实例,可以像ServerProxy一样调用方法,然后不带参数地调用这个对象来具体运行远程函数。返回值是一个迭代器,可以得到所有调用的结果。
运行结果:
如果某个调用导致一个Fault,那么从迭代器生成结果时会产生异常,所以不再生成更多结果。
import xmlrpc.client
server = xmlrpc.client.ServerProxy('http://localhost:9000')
multicall = xmlrpc.client.MultiCall(server)
multicall.ping()
multicall.show_type(1)
multicall.raises_exception('Next-to-last call stops execution')
multicall.show_type('string')
try:
for i, r in enumerate(multicall()):
print(i,r)
except xmlrpc.client.Fault as err:
print('ERROR:',err)
由于第三个响应(来自raises_exception())生成了一个异常,所以无法再访问show_type()的响应。
运行结果: