我有一个获取html页面的Perl脚本.我尝试用Python重写它(Just Coz我正在尝试学习Python),我发现它真的很慢!
这是Perl中的测试脚本
#!/usr/bin/perl
use LWP::Simple;
$url = "http://majorgeeks.com/page.php?id=";
open(WEB,">>"."perldata.txt");
for ($column = 1 ; $column <= 20 ; $column ++)
{
$temp = $url.$column;
print "val = $temp\n\n";
$response=get($temp)or die("[-] Failed!!\n");
print WEB "$response\n\n";
}
Run Code Online (Sandbox Code Playgroud)
这是Python中的等效代码
import urllib2
url = "http://majorgeeks.com/page.php?id="
f = open("pydata.txt", 'w')
for i in range(20):
tempurl = url + str(i+1)
print "Val : " + tempurl + "\n\n"
#req = urllib2.Request(tempurl)
res = urllib2.urlopen(tempurl)
f.write(res.read())
f.close()
Run Code Online (Sandbox Code Playgroud)
我发现的差异是巨大的!Perl脚本在大约30秒内完成.虽然Python脚本花了大约7分钟.(420秒)!!
我正在使用Ubuntu 11.10,64bit,Core i7,在12MBPS连接上进行测试.我试了几次,每次都得到相同数量的差异.
我在这里做错了吗?或者我需要做点什么?或者差异是否合理?(我希望不是)
非常感谢你的帮助.
更新3:我刚刚回家并启动我的笔记本电脑,再次运行代码,它在11秒内完成!:/是因为我"重新启动"我的comp? 这是 Profiler输出
注意 - Perl仍然花了31秒同样的事情!! :/
更新2:由于@Makoto建议下面是本人曾于分析器数据.这真的很慢!我知道一些python配置与此有关,但不知道是什么.一个简单的要求,它不应该需要20秒!
更新:修复了网址到tempurl.按照此处的建议注释掉urllib2.Request.根本没什么区别.
您的代码可以改进,尽管我不确定它会解决所有性能问题:
from urllib2 import urlopen
url = "http://majorgeeks.com/page.php?id={}"
with open("pydata.txt", 'w') as f:
for i in xrange(1, 21):
tempurl = url.format(i)
print "Val : {}\n\n".format(tempurl)
f.write(urlopen(tempurl).read())
Run Code Online (Sandbox Code Playgroud)
我也在逻辑上更改了它 - 它现在请求不同的 URL(由 定义tempurl
),它过去请求相同的 URL 20 次(由 定义url
)。我还使用了字符串格式化,尽管我不确定它如何影响效率。
我在我的系统(Windows 7 64 位、Python 2.7.2、空闲、中等互联网连接)上测试了它,花了 40 秒(40.262)完成。
归档时间: |
|
查看次数: |
1380 次 |
最近记录: |