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

Dmi*_*sev 2 python time curl 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()
Run Code Online (Sandbox Code Playgroud)

但我如何确定这个请求的时间呢?

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
Run Code Online (Sandbox Code Playgroud)

我得到 0.0 o(有时)0.01。这是错误的 diff,因为我在 python shell 中执行此命令,并且在执行之后ts = time.clock()和执行之前还剩下一些时间print time.clock() - ts,所以 diff 应该约为 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
Run Code Online (Sandbox Code Playgroud)

小智 5

完成后,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)
Run Code Online (Sandbox Code Playgroud)

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

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