我创建了一个小程序来使用套接字传输文件(客户端/服务器)。在我的发送功能中,我已经测量了执行某些任务所需的时间,以便估计传输的平均速度。
while (l):
start_time = time.time()
self.__sendData(l)
acc += len(l)
self.__setProgress(acc)
l = f.read(1024)
elapsed_time = time.time() - start_time
print("longitud: " + str(len(l)))
print("total: " + str(elapsed_time))
self.__setSpeed(len(l), elapsed_time)
在这里您可以看到我有一个acc
(累加器)变量,以便计算转移的总进度。我读取了文件的后1024
个字节,并计算了执行这些操作所需的时间。我的函数__setSpeed
仅使用最新的50
瞬时速度来计算平均速度。
此在Linux上运行正常,一点问题都没有。但是,当我在Windows中运行此命令时,发现以下输出:
如您所见,很多时候time for transfer and file read
恰好是zero
。我不明白为什么会这样,因为:
readtime
变为0。好吧。sendData
函数的速度可能非常快,因为它的数量很少。好的,但是真的是零吗?所以基本上我的问题是两个:
答案 0 :(得分:1)
在Windows中,time.time
基于GetSystemTimeAsFileTime
。我们可以使用time.get_clock_info
获得此时钟的分辨率。对于系统时钟,它调用GetSystemTimeAdjustment
。默认分辨率为15.625 ms:
>>> time.get_clock_info('time').resolution
0.015625
time.perf_counter
应该可以解决您的问题。在Windows中,它基于QueryPerformanceCounter
。为了获得此时钟的分辨率,get_clock_info
调用QueryPerformanceFrequency
。通常是100 ns:
>>> time.get_clock_info('perf_counter').resolution
1e-07