我有以下python脚本( server.py ),以便侦听端口并捕获来自客户端的请求。我从另一个python文件( Main.py )调用此脚本。我的要求是在一段时间后停止执行 server.py 。我尝试在文件的最后一行使用exit() - server.py 来停止服务器并停止执行文件,但是我无法阻止脚本运行和服务器不断回应。任何人都可以帮我告诉我哪里出错了。
Server.py
bind_ip = "127.0.0.1"
bind_port = 2530
def servercreate():
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((bind_ip,bind_port))
server.listen(5)
while True:
client, addr = server.accept()
print('[*] Accepted connection from: %s:%d' % (addr[0], addr[1]))
client_handler = threading.Thread(target=handle_client, args=(client,))
client_handler.start()
def handle_client(client_socket):
request = client_socket.recv(2056)
print('[*] Received: %s' % request)
message = "{}"
client_socket.send(message.encode('utf-8'))
client_socket.close()
if __name__ == '__main__':
servercreate()
Main.py
import Server
Server.servercreate()
答案 0 :(得分:3)
如果你不希望你的代码被time.sleep中断(我想这会阻止代码运行),请使用:
import time
timeout = time.time() + 10
while True:
print ('hello')
if time.time() > timeout:
print ('program terminated')
break
如果你想要10分钟的时间使用:
timeout = time.time() + 60*10
如果您只想在一定时间后停止程序运行,请使用类似
的内容import time
x=0
while True:
print ('waiting 5')
time.sleep(5)
x += 1
if x == (10):
break
time.sleep是以秒为单位,break会停止循环并且应该结束你的程序
更新,试试这个:
import time
bind_ip = "127.0.0.1"
bind_port = 2530
def servercreate():
#put minutes of time you want program to run for below
minutes = 10
timeout = time.time() + (60*minutes)
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((bind_ip,bind_port))
server.listen(5)
while True:
client, addr = server.accept()
print('[*] Accepted connection from: %s:%d' % (addr[0], addr[1]))
client_handler = threading.Thread(target=handle_client, args=(client,))
client_handler.start()
if time.time() > timeout:
break
def handle_client(client_socket):
request = client_socket.recv(2056)
print('[*] Received: %s' % request)
message = "{}"
client_socket.send(message.encode('utf-8'))
client_socket.close()
if __name__ == '__main__':
servercreate()