在python服务器中,如何在一段时间后调用函数?

2024-04-20 12:44:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python套接字服务器,它监听HTTP请求。它从ip地址列表中随机选择后返回ip地址和端口。这个结果是由另一个从数据库中获取它的文件生成的。数据库不断更新。我希望每10个请求或100秒后更新列表,其中任何一个都可以。下面的代码不适合我。每五次请求后,连接就会重置。我把计数打印出来,每5个请求就增加到10个。有人能告诉我我这里缺少什么吗?在

result=get_ip() # Get a list of dictionary by calling get_ip() function
HOST, PORT = '127.0.0.1', 8890
listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listen_socket.bind((HOST, PORT))
listen_socket.listen(10)
print 'Serving HTTP on port %s ...' % PORT
count = 0
while True:
    if count % 10 == 0:
         result=get_ip()
    count +=1
    client_connection, client_address = listen_socket.accept()
    rand_ip = random.choice(result)
    ip = rand_ip["ip"]
    port = rand_ip["port"]
    client_connection.sendall(ip+":"+port)
    client_connection.close()

Tags: ipclient数据库http列表getport地址
1条回答
网友
1楼 · 发布于 2024-04-20 12:44:57

问题来自close。写东西后马上写进插座是很危险的。您应该首先关闭套接字,使对等方有一个0读,指示一个正确的and流

所以你的脚本应该以:

client_connection.sendall(ip+":"+port)
try:
    client_connection.shutdown(socket.SHUT_WR)  # signal end of strem
    while True:  # wait for the client to close or shutdown his side
        q = client_connection.recv(1024)
        if len(q) == 0:
            break
finally:
    client_connection.close()  # close the socket only after the client has close its side

相关问题 更多 >