当前位置:  开发笔记 > 编程语言 > 正文

设置xmlrpclib.ServerProxy的超时

如何解决《设置xmlrpclib.ServerProxy的超时》经验,为你挑选了3个好方法。

我正在使用xmlrpclib.ServerProxy对远程服务器进行RPC调用.如果没有到服务器的网络连接,则需要默认的10秒钟才能将socket.gaierror返回给我的程序.

在没有网络连接的情况下进行开发或者远程服务器关闭时,这很烦人.有没有办法更新我的ServerProxy对象上的超时?

我看不到一个明确的方法来访问套接字来更新它.



1> azarias..:

更直接的解决方案是:http: //www.devpicayune.com/entry/200609191448

import xmlrpclib 
import socket

x = xmlrpclib.ServerProxy('http:1.2.3.4')  
socket.setdefaulttimeout(10)        #set the timeout to 10 seconds 
x.func_name(args)                   #times out after 10 seconds
socket.setdefaulttimeout(None)      #sets the default back



2> 小智..:

干净的非全球版本.

import xmlrpclib
import httplib


class TimeoutHTTPConnection(httplib.HTTPConnection):
    def connect(self):
        httplib.HTTPConnection.connect(self)
        self.sock.settimeout(self.timeout)


class TimeoutHTTP(httplib.HTTP):
    _connection_class = TimeoutHTTPConnection

    def set_timeout(self, timeout):
        self._conn.timeout = timeout


class TimeoutTransport(xmlrpclib.Transport):
    def __init__(self, timeout=10, *l, **kw):
        xmlrpclib.Transport.__init__(self, *l, **kw)
        self.timeout = timeout

    def make_connection(self, host):
        conn = TimeoutHTTP(host)
        conn.set_timeout(self.timeout)
        return conn


class TimeoutServerProxy(xmlrpclib.ServerProxy):
    def __init__(self, uri, timeout=10, *l, **kw):
        kw['transport'] = TimeoutTransport(
            timeout=timeout, use_datetime=kw.get('use_datetime', 0))
        xmlrpclib.ServerProxy.__init__(self, uri, *l, **kw)


if __name__ == "__main__":
    s = TimeoutServerProxy('http://127.0.0.1:9090', timeout=2)
    s.dummy()


在Python 2.7上不适合我.当我进行RPC调用时,我得到错误`AttributeError:TimeoutHTTP实例没有属性'getresponse'

3> Troy J. Farr..:

我已经看了几种方法来解决这个问题,到目前为止,最优雅的方法在这里描述:https: //seattle.cs.washington.edu/browser/seattle/trunk/demokit/timeout_xmlrpclib.py?ev = 692

这项技术最初是在这里提出的,但这个链接已经死了:http: //blog.bjola.ca/2007/08/using-timeout-with-xmlrpclib.html

这适用于Python 2.5和2.6.新链接声称也可以使用Python 3.0.

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有