我在我的脚本中使用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
我将TIMEOUT设置为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>
答案 0 :(得分:0)
超时设置为20用于工作得很好然后突然,今天它开始超时我...有没有人有任何线索?
嗯,第一个线索是即使您的代码没有改变,行为也会改变。所以,它必须与环境有关。
最有可能的是,超时是一个完全准确的标志,表明服务器过载,损坏等等。但是,由于您没有向我们提供有关您尝试与之交谈的服务器的任何信息,因此很难做的不仅仅是猜测。
以下是跟踪问题的一些想法。
首先,将完全相同的网址粘贴到浏览器的地址栏中,看看会发生什么。它超时了吗?或者需要超过20秒才能回复?
尝试将&data=data
添加到网址末尾。
尝试使用简单的工具将请求作为POST发送。例如,从命令行尝试curl -d data http://whatever
。
尝试准确记录所使用的标题和发布数据urllib2
,并使curl
发送完全相同的内容。 (如果此操作失败,并且前一个工作失败了,您可能想要编辑您的问题,或者提出一个新问题,其中包含“为什么这样做而且失败了?”以及详细信息。)
尝试从具有不同互联网连接的其他计算机上运行相同的测试。