0

如何解决这个错误?我想从 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()

这是我得到的错误: 在此处输入图像描述

4

1 回答 1

2

我想你会发现,因为你不断地创建新的连接而不关闭它们,你最终会耗尽资源。

这可能是本地限制,也可能是服务器端厌倦了来自单个 IP 的太多连接。

无论如何,要么创建一个连接并反复使用它,要么在完成连接后关闭它们。


一种可能的方法是connect()在调用之前在主代码中activate()

connect()
update_coordinates()
while True:
    activate()

然后connect()update_coordinates()函数的开头删除初始值,因为这是每次尝试更新坐标时都会进行新连接的位。

如果会话由于某种原因关闭,该except位将重新创建它并重试。

这应该有望大大缓解您的资源问题。

于 2012-10-05T03:39:56.073 回答