0

我的任务是定期向服务器发出请求,并将此请求的时间写入数据库。我使用 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。ts = time.clock()这是错误的差异,因为我在 python shell 中执行了这个命令,并且在我执行之后和执行之前还剩下一些时间print time.clock() - ts,所以差异应该是大约 3 秒。

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

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

解决方案

想法取自这篇文章。简而言之,您应该在 windows 上使用 time.clock(),在 Linux 或 Unix(Ubuntu 和其他、FreeBSD 和其他、MacOS)上使用 time.time()。您还可以使用 timeit.default_timer()。此函数检测操作系统类型并选择 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
4

3 回答 3

4

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

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

于 2018-08-24T18:16:33.580 回答
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
于 2012-08-12T17:10:26.060 回答
0

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

于 2014-08-25T17:24:09.573 回答