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
| 归档时间: |
|
| 查看次数: |
3431 次 |
| 最近记录: |