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