Python定时套接字连接

时间:2012-09-05 10:22:18

标签: python windows sockets network-programming

我希望花时间完成使用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()

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

2 个答案:

答案 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总是给我相同的非常小的值。这可能是问题所在。