如何解决此错误?我想传递来自get_robotxya()和get_ballxya()的值 并在循环中使用它但似乎它会在一段时间后崩溃我如何解决这个问题?我希望得到的值不会超出while循环
import socket
import os,sys
import time
from threading import Thread
HOST = '59.191.193.59'
PORT = 5555
COORDINATES = []
def connect():
globals()['client_socket'] = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((HOST,PORT))
def update_coordinates():
connect()
screen_width = 0
screen_height = 0
while True:
try:
client_socket.send("loc\n")
data = client_socket.recv(8192)
except:
connect();
continue;
globals()['COORDINATES'] = data.split()
if(not(COORDINATES[-1] == "eom" and COORDINATES[0] == "start")):
continue
if (screen_width != int(COORDINATES[2])):
screen_width = int(COORDINATES[2])
screen_height = int(COORDINATES[3])
return
def get_ballxy():
update_coordinates()
ballx = int(COORDINATES[8])
bally = int(COORDINATES[9])
return ballx,bally
def get_robotxya():
update_coordinates()
robotx = int(COORDINATES[12])
roboty = int(COORDINATES[13])
angle = int(COORDINATES[14])
return robotx,roboty,angle
def print_ballxy(bx,by):
print bx
print by
def print_robotxya(rx,ry,a):
print rx
print ry
print a
def activate():
bx,by = get_ballxy()
rx,ry,a = get_robotxya()
print_ballxy(bx,by)
print_robotxya(rx,ry,a)
Thread(target=update_coordinates).start()
while True:
activate()
这是我得到的错误:
答案 0 :(得分:2)
我想你会发现,因为你在不关闭它们的情况下不断创建新的连接,你最终会耗尽资源。
这可能是本地限制,也可能是服务器端因单个IP连接过多而感到厌烦。
无论如何,要么创建一个连接并反复使用它,要么在完成连接时关闭连接。
执行此操作的一种可能方法是在调用connect()
之前在主代码中activate()
:
connect()
update_coordinates()
while True:
activate()
然后从connect()
函数的开头删除初始update_coordinates()
,因为每次尝试更新坐标时都会执行新连接。
如果会话因某种原因而失败,except
位将重新创建并重试。
这应该有望缓解你的资源问题。