取消xmlrpc客户端请求?

时间:2012-05-06 20:50:08

标签: python xml-rpc rpc xmlrpclib xmlrpcclient

是否有可能以某种方式取消xmlrpc客户端请求?

假设我在一个帖子中有类似的代码:

svr = xmlrpclib.ServerProxy('http://localhost:9092')
svr.DoSomethingWhichNeedTime()

我不是指某种TimeOut ...有时从另一个线程我可以获得取消我的工作的事件。然后我需要取消这个请求。

我知道我可以用twisted来做,但是,是否可以使用标准的xmlrpclib来实现?

2 个答案:

答案 0 :(得分:2)

首先,它必须在服务器端实现,而不是在客户端(xmlrpclib)中实现。如果您只是中断对XML-RPC服务器的HTTP请求,则无法保证服务器上运行的长进程根本不会中断。所以xmlrpclib就不能拥有这个功能。

如果要实现此行为,则需要创建两种类型的请求。第一种类型的请求将告诉您的服务器启动一些长时间的过程。它必须在后台执行(在另一个线程或进程中),并且您的XML-RPC服务器必须立即将响应(“Process started!”)发送到客户端。当您想要停止该过程时,客户端必须发送另一个请求,告诉您的服务器停止执行该过程。

答案 1 :(得分:1)

是的,如果你想做真肮脏的黑客......

基本上,ServerProxy对象保留了底层套接字/ http连接的句柄。如果你到达那些内部并且只是关闭()套接字,你的客户端代码就会被异常爆炸。如果你正确处理它,你的取消。

如果您通过transport参数为ServerProxy注册自己的传输类,并为其提供一些取消您想要的取消方法,那么您可以更加理智。

这不会阻止服务器处理事务,除非它对直接关闭频道做出反应。