Python 监视套接字连接

Python 监视套接字连接,python,Python,我有一个插座连接,我想监测,它接收高突发市场数据 while 1: socket.recv() print('data recevied') while循环应仅在60秒内执行一次print 试试这个: from datetime import datetime last = datetime.now() while 1: socket.recv() if (datetime.now() - last).seconds >= 60:

我有一个插座连接,我想监测,它接收高突发市场数据

while 1:
    socket.recv()        
    print('data recevied')
while循环应仅在60秒内执行一次print

试试这个:

from datetime import datetime

last = datetime.now()
while 1:
    socket.recv()
    if (datetime.now() - last).seconds >= 60:
      print("data received")
      last = datetime.now()

这里需要某种异步处理:一方面希望连续接收数据,另一方面希望每60秒显示一条消息

所以线程将是我的第一个想法:前台显示消息,而后台接收消息

def recv_loop(socket, end_cond):
    while True:
        socket.recv(1024)
    # assuming something ends above loop
    end_cond[0] = True

end = False
recv_thr = threading.Thread(target = recv_loop, args = (socket,[end]), daemon = True)
recv_thr.start()
while not end:
    time.sleep(60)
    print('data received')
您没有在消息中显示任何有趣的数据,因此我也没有。但是,由于所有全局变量都是共享的,所以显示自上次消息以来接收的字节数就很简单了

或者,您可以使用
select.select
,因为它会给您一个超时时间。因此,您可以更改线程以进行更复杂的超时处理

last = datetime.datetime.now()
while True:
    timeout = (datetime.datetime.now() - last).seconds + 60
    if timeout <= 0:
        last = datetime.datetime.now()
        print("data received")
    rl, _, _ = select.select([socket], [], [], timeout)
    if (len(rl) > 0):
        sockect.recv(1024)
last=datetime.datetime.now()
尽管如此:
超时=(datetime.datetime.now()-last)。秒+60
如果超时为0):
socket.recv(1024)

但是,如果在那个特定的时间,套接字没有接收到任何东西,所以在套接字可能正常工作时它将不会被执行。在这种情况下,您希望发生什么?请更具体地说明您的要求。您的打印(“接收到的数据”)虽然循环独立于recv_-thr,但它将继续打印,即使recv_-thr线程存在。您没有说明接收线程应如何退出。无论如何,添加状态变量很简单。查看我的编辑。。。