Pycurl:如何确定请求的持续时间

时间:2012-08-12 17:03:43

标签: python curl time pycurl

我的任务是定期向服务器发出请求,并将此请求的时间写入数据库。我使用Python 2.7.3,cURL和pycurl作为cURL的包装器。我这样请求:

import pycurl
c = pycurl.Curl()
c.setopt(c.URL, "http://google.com/")
c.setopt(c.VERBOSE, True) # to see request details
c.perform()

但我如何确定此请求的时间?

UPD1

好的,我明白,我应该采用2个时间戳,它们之间的差异将是请求的持续时间。但是我遇到了一些问题:

执行时:

import pycurl, time
c = pycurl.Curl()
c.setopt(c.URL, "http://google.com/")
c.setopt(c.VERBOSE, True) # to see request details
ts = time.clock()
c.perform()
print time.clock() - ts

我得到0.0 o(有时)0.01。这是错误的差异,因为我在python shell中执行了这个命令,并且在我执行ts = time.clock()之后和我执行print time.clock() - ts之前剩下一些时间,因此差异应该是大约3秒。

我在安装在Virtualbox上的Ubuntu服务器12.04上输出此输出。在Windows 7上安装了Virtualbox。当我在Windows 7中尝试下面的代码时,我得到了正确的输出。

这是另一个问题 - 也许我应该使用time.time()而不是time.clock()?

解决方案

想法取自this post。简而言之,你应该在Linux或Unix(Ubuntu和其他人,FreeBSD和其他人,MacOS)上的windows和time.time()上使用time.clock()。您还可以使用timeit.default_timer()。此函数检测os类型并选择time.time()或time.clock()。所以解决方案的代码是:

import pycurl, timeit
c = pycurl.Curl()
c.setopt(c.URL, "http://google.com/")
c.setopt(c.VERBOSE, True) # to see request details
ts = timeit.default_timer()
c.perform()
print timeit.default_timer() - ts

3 个答案:

答案 0 :(得分:2)

import pycurl, time
c = pycurl.Curl()
c.setopt(c.URL, "http://google.com/")
c.setopt(c.VERBOSE, True) # to see request details
ts = time.clock()
c.perform()
print time.clock() - ts

答案 1 :(得分:0)

不要使用time.clock()来计算经过的时间间隔。它现在也已被弃用。

答案 2 :(得分:0)

完成curl.perform()后,您可以从卷曲手柄中提取信息:

m = {}
m['total-time'] = curl.getinfo(pycurl.TOTAL_TIME)
m['namelookup-time'] = curl.getinfo(pycurl.NAMELOOKUP_TIME)
m['connect-time'] = curl.getinfo(pycurl.CONNECT_TIME)
m['pretransfer-time'] = curl.getinfo(pycurl.PRETRANSFER_TIME)
m['redirect-time'] = curl.getinfo(pycurl.REDIRECT_TIME)
m['starttransfer-time'] = curl.getinfo(pycurl.STARTTRANSFER_TIME)

getinfo()的文档: http://pycurl.io/docs/latest/curlobject.html#pycurl.Curl.getinfo

可从请求获取的可用信息列表: https://curl.haxx.se/libcurl/c/curl_easy_getinfo.html