0

Windows内では、pycurlは小数点以下3桁までのタイミングの精度を提供しますが、これをはるかに正確なものに改善する方法はありますか?

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

たとえば、Linuxでは小数点以下約7桁になります。

4

2 に答える 2

2

pycurlのソースを見ると、基になるcURL関数を呼び出しているだけです。

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これは、によって割り当てられたを参照します。これはCurl_tvnow、次のように定義された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をコンパイルすることはできません。ごめん!

于 2012-11-16T13:10:45.197 に答える
2

これは、基になるlibcurlコードの制限であると思います。これは、WindowsでGetTickCount()関数呼び出しを使用します。これは、次のように文書化されています。

GetTickCount関数の解像度は、システムタイマーの解像度に制限されます。これは通常、10ミリ秒から16ミリ秒の範囲です。

于 2012-11-17T13:14:39.743 に答える