gpt4 book ai didi

python - 如何在 python 服务器中的某个时间间隔后调用函数?

转载 作者:可可西里 更新时间:2023-11-01 17:07:43 24 4
gpt4 key购买 nike

我有一个 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()

最佳答案

问题来自关闭。向套接字写入内容后立即关闭套接字是很危险的。您应该首先关闭套接字以使对等方读取 0 以指示正确的流

所以你的脚本应该结束于:

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

关于python - 如何在 python 服务器中的某个时间间隔后调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33935568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com