2

我正在寻找使用 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()

我遇到的问题是我不认为连接计时器正在工作,因为我经常得到相同的时间戳返回。有人可以指出我正确的方向来解决这个问题。

4

2 回答 2

5

在 Windows 上,该time.time()值没有足够的粒度(只有 1/60 秒)。在 Windows 上使用time.perf_counter()which 具有大约 1/3 微秒的分辨率,而不是:

start = time.perf_counter()
s.connect(('localhost',80))
print 'time taken ', time.perf_counter()-start ,' seconds'

这与timeit模块使用的定时器相同;您可以改用.default_timer()定义:

import timeit

start = timeit.default_timer()
# etc.

这也适用于time.perf_counter()不可用的 Python 2,但 timeit.default_timer()将引用适用于您的操作系统的最佳可用计时器(在 Windows 上,在其他系统上time.clock()具有大约 1/100 秒的分辨率)。time.time()

于 2012-09-05T10:40:46.093 回答
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 我的本地主机总是给我同样非常小的值。这可能是问题所在。

于 2012-09-05T10:40:50.157 回答