我进行了一项实验,比较了Python和C ++中的睡眠/暂停时间精度。
实验概要:
在100万次迭代的循环中,每次迭代中睡眠1微秒。
预期持续时间:1.000000秒(对于100%准确的程序)
在Python中:
import pause
import datetime
start = time.time()
dt = datetime.datetime.now()
for i in range(1000000):
dt += datetime.timedelta(microseconds=1)
pause.until(dt)
end = time.time()
print(end - start)
期望值:1.000000秒,实际值(约为):2.603796
使用C++语言:
#include <iostream>
#include <chrono>
#include <thread>
using namespace std;
using usec = std::chrono::microseconds;
using datetime = chrono::_V2::steady_clock::time_point;
using clk = chrono::_V2::steady_clock;
int main()
{
datetime dt;
usec timedelta = static_cast<usec>(1);
dt = clk::now();
const auto start = dt;
for(int i=0; i < 1000000; ++i) {
dt += timedelta;
this_thread::sleep_until(dt);
}
const auto end = clk::now();
chrono::duration<double> elapsed_seconds = end - start;
cout << elapsed_seconds.count();
return 0;
}
期望值:1.000000秒,实际值(大约):1.000040
显然C++更加准确,但是我正在使用Python开发一个项目,需要提高准确性。有什么建议吗?
注:如果有其他更为准确的Python库/技术,请建议使用。
pause.until(dt)
不应该在循环范围内吗? - DirtyBitpause.until(1)
时会发生什么? - DirtyBitpause.until(1)
给出了更好的精度 1.053545。但它仍然比 C++ 不够准确。 - Ahmed Hussein