我希望花时间完成使用TCP的服务器往返。使用Windows客户端时。 (我会使用ping但是服务器阻止了这个)
我正在使用python和套接字完成此操作,而且我目前已经完成了。
import time
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM )
start = time.time()
s.connect(('localhost',80))
print 'time taken ', time.time()-start ,' seconds'
s.close()
我遇到的问题是我不认为连接计时器正常工作,因为我经常得到相同的时间戳返回。有人能指出我正确的方向来解决这个问题。
答案 0 :(得分:5)
在Windows上,time.time()
值没有足够的粒度(仅为1/60秒)。使用time.perf_counter()
在Windows上具有大约1/3微秒分辨率,而不是:
start = time.perf_counter()
s.connect(('localhost',80))
print 'time taken ', time.perf_counter()-start ,' seconds'
这与timeit
module使用的计时器相同;您可以改为使用.default_timer()定义:
import timeit
start = timeit.default_timer()
# etc.
这也适用于Python 2,其中time.perf_counter()
不可用,但timeit.default_timer()
将引用您的操作系统的最佳可用计时器(Windows上为time.clock()
,其中大约有1个/ 100秒的分辨率,time.time()
在其他系统上。)
答案 1 :(得分:1)
使用以下修改后的脚本,我在Windows 7上获得与ping
相同的结果。
import time
import socket
while True:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM )
start = time.time()
s.connect(('www.google.at',80))
print 'time taken ', (time.time()-start)*1000 ,' ms'
s.close()
time.sleep(1)
Ping我的localhost总是给我相同的非常小的值。这可能是问题所在。