python获取远程页面内容,避免卡死问题

在python 2.7中,获取远程页面的数据可以使用urllib模块,也可以使用urlib2模块。我是使用urllib2模块来操作的。

我在本地建立一个测试文件test.php,文件内容就是输出一段字符串:

1 echo 'I think; therefor, I exist.';

我也搭建了web服务器,可以通过http://localhost/test.php来访问这个文件。

而后用python中的urllib2中的方法来获取这个这个地址的内容:

1 import urllib2
2  
3 url = "http://localhost/test.php"
4 = urllib2.urlopen(url)
5 print f.readlines()

上例如果成功运行,应该看到这样的输出:

['I think; therefor, I exist.']

但是这样的代码并不完善,如果请求的页面很久没有返回数据,python就会处于等待过程,直到页面数据返回。在test.php加上休眠代码,模拟页面很久才能返回数据:

1 sleep(10)

修改python程序,加入时间输出:

1 import urllib2
2 import time
3  
4 print time.time() #start time
5 url = "http://localhost/test.php"
6 = urllib2.urlopen(url)
7 print f.readlines()
8 print time.time() #end time

重新运行python程序,等待大约10秒钟,才能看到数据返回,正常的话,输出如下:

1351344569.49
['I think; therefor, I exist.']
1351344579.5

开始时间和结束想差了10秒,就是上面加的sleep(10)了。如果页面数据一直不返回,那么不是要一直等下去?可以在urllib2.urlpen()时加上timeout参数,设置超时时间,在python 2.6以上的版本才支持。修改python代码:

1 import urllib2
2 import time
3  
4 print time.time()
5 try:
6     url = "http://localhost/test.php"
7     = urllib2.urlopen(url, timeout=5)
8     print f.readlines()
9 except Exception, e:
10     print e
11 print time.time()

上面加入了超时设置,因为如果超时退出的话,还会抛出一个异常,所以加上try/except处理。正常执行后应当输出:

1351345395.35
timed out
1351345400.37

这边就只等待了5秒,然后就因为请求远程数据超时退出了,不会一直卡住。

友情提示:

如果是在python 2.6版本之前,可以通过socket.setdefaulttimeout()方法来设置超时时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值