我的任务是定期向服务器发出请求,并将此请求的时间写入数据库。我使用 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