2012-11-16 48 views
0

在窗口內pycurl給出了精確到3位小數的時間,有沒有辦法將此改進到更精確的方式?窗口上的CURL精度

> print c.getinfo(pycurl.CONNECT_TIME) 
> 0.265 

Linux的例子給它大約7位小數。

回答

2

縱觀源pycurl,它只是調用底層捲曲功能:

case CURLINFO_CONNECT_TIME: // other cases [snip]ped 
     /* Return PyFloat as result */ 
     double d_res = 0.0; 

     res = curl_easy_getinfo(self->handle, (CURLINFO)option, &d_res); 
     if (res != CURLE_OK) { 
      CURLERROR_RETVAL(); 
     } 
     return PyFloat_FromDouble(d_res); 
    } 

這又確實

case CURLINFO_CONNECT_TIME: 
    *param_doublep = data->progress.t_connect; 
    break; 

t_connect

data->progress.t_connect = Curl_tvdiff_secs(now, data->progress.t_startsingle); 

分配給哪個參考文獻t_startsingle,其由分配,它是Windows下定義爲

struct timeval curlx_tvnow(void) 
{ 
    /* 
    ** GetTickCount() is available on _all_ Windows versions from W95 up 
    ** to nowadays. Returns milliseconds elapsed since last system boot, 
    ** increases monotonically and wraps once 49.7 days have elapsed. 
    */ 
    struct timeval now; 
    DWORD milliseconds = GetTickCount(); 
    now.tv_sec = milliseconds/1000; 
    now.tv_usec = (milliseconds % 1000) * 1000; 
    return now; 
} 

即,精確到毫秒。

因爲缺少修補和重新編譯cURL以使用更高精度的定時器,所以編譯pyCURL反對,沒有。抱歉!

2

恐怕這是底層libcurl代碼的限制。它使用在Windows中的GetTickCount()函數調用,這是documented like this

GetTickCount函數的分辨率被限制爲 分辨率系統定時器的,這是通常在10 毫秒到16的範圍內毫秒。