python中的urllib2 post超时

python中的urllib2 post超时,python,timeout,urllib2,Python,Timeout,Urllib2,我在脚本中使用urllib2.py将一个文件保存到一个Web服务器,它一直在计时。我的代码: def postdata(nodemac,filename,timestamp): try: wakeup() socket.setdefaulttimeout(TIMEOUT) opener = urllib2.build_opener(MultipartPostHandler.MultipartPostHandler) host

我在脚本中使用urllib2.py将一个文件保存到一个Web服务器,它一直在计时。我的代码:

def postdata(nodemac,filename,timestamp):
    try:
        wakeup()
        socket.setdefaulttimeout(TIMEOUT)
        opener = urllib2.build_opener(MultipartPostHandler.MultipartPostHandler)
        host = HOST
        func = "post_data"
        url = "http://{0}{1}?f={2}&nodemac={3}&time={4}".format(host, URI, func, nodemac, timestamp)
        if os.path.isfile(filename):
            data = {"data":open(filename,"rb")}
            response = opener.open(url, data, timeout=TIMEOUT)
            retval = response.read()
            if "SUCCESS" in retval:
                return 0
            else:
                print "RETVAL "+retval
                return 99
        else:
            print filename +" is not a file"
            return 99
    except Exception as e:
        print e
        return 99
我将超时设置为20、60和120,但同样的事情一直在发生。我想知道这是怎么回事?有东西是肮脏的!设置为20的超时过去工作正常,然后突然,今天我开始超时。。。有人有什么线索吗?我找不到任何能让我在网上走得更远的东西,所以我想我应该在这里试试

谢谢

回溯:

 File "gateway.py", line 686, in CloudRun
    read_img()
  File "gateway.py", line 668, in read_img
    retval = database.postimg(mac,fh,timestmp)
  File "/root/database.py", line 100, in postimg
    response = opener.open(url, data, timeout=TIMEOUT)
  File "/usr/lib/python2.7/urllib2.py", line 394, in open
  File "/usr/lib/python2.7/urllib2.py", line 412, in _open
  File "/usr/lib/python2.7/urllib2.py", line 372, in _call_chain
  File "/usr/lib/python2.7/urllib2.py", line 1199, in http_open
  File "/usr/lib/python2.7/urllib2.py", line 1174, in do_open
URLError: <urlopen error timed out>
文件“gateway.py”,第686行,在CloudRun中
阅读(img)
文件“gateway.py”,第668行,在read\u img中
retval=database.postimg(mac、fh、timestmp)
文件“/root/database.py”,第100行,postimg格式
response=opener.open(url、数据、超时=超时)
文件“/usr/lib/python2.7/urllib2.py”,第394行,打开
文件“/usr/lib/python2.7/urllib2.py”,第412行,打开
文件“/usr/lib/python2.7/urllib2.py”,第372行,在调用链中
http_open中的文件“/usr/lib/python2.7/urllib2.py”,第1199行
文件“/usr/lib/python2.7/urllib2.py”,第1174行,打开
URL错误:
设置为20的超时过去工作正常,然后突然,今天我开始超时。。。有人有什么线索吗

第一条线索是,即使代码没有改变,行为也会改变。所以,这一定是与环境有关

最有可能的情况是,超时是服务器过载、损坏等的一个非常准确的迹象。但是,由于您没有向我们提供您试图与之交谈的服务器的任何信息,因此除了猜测之外,很难做更多的事

下面是一些追踪问题的想法

首先,获取完全相同的URL,将其粘贴到浏览器的地址栏中,然后看看会发生什么。超时了吗?或者需要20秒以上的时间来响应

尝试将
&data=data
添加到URL的末尾

尝试使用一个简单的工具以POST的形式发送请求。例如,在命令行中,尝试
curl-d数据http://whatever

尝试准确地记录使用的标题和post数据
urllib2
,并使
curl
发送完全相同的内容。(如果这一步失败了,而前一步成功了,您可能需要编辑您的问题,或提出一个新问题,并附上“为什么这一步成功了,而那一步失败了?”以及详细信息。)


尝试从具有不同internet连接的不同计算机上运行相同的测试。

实际的回溯是什么?可能服务器没有响应,因此超时完全有效?(如果您尝试在web浏览器中访问同一URL会发生什么情况?如果您访问同一URL并在其末尾添加了
&data=“foo”
),或者您的网络可能有问题?如果以前工作的完全相同的代码不再工作,环境中的某些东西发生了变化,而您完全没有告诉我们有关该环境的任何信息,那么我们所能做的就是提供跟踪问题的模糊提示…