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からの接続が多すぎることにうんざりしている可能性があります。

いずれにせよ、1つの接続を作成してそれを何度も使用するか、接続が終了したら接続をシャットダウンします。


これを行うための1つの可能な方法は、connect()呼び出す前にメインコード内で行うことactivate()です。

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

connect()次に、関数の先頭からイニシャルを削除しupdate_coordinates()ます。これは、座標を更新しようとするたびに新しい接続を行うビットだからです。

何らかの理由でセッションがダウンした場合、exceptビットはセッションを再作成して再試行します。

これにより、リソースの問題がかなり軽減されるはずです。

于 2012-10-05T03:39:56.073 に答える