2016-01-07 2 views
0

Я выполняю цикл в python, когда создал собственный постоянный слушатель. Мой вопрос в том, как я могу гарантировать, что я не переполняю/терпит крах? Логически это говорит мне, что я оставляю много открытых функций в фоновом режиме. После выполнения параметров моего приложения I exit(0) для чистого закрытия. но как я могу обеспечить, чтобы это не съедало память?очистка функции looping

Этот код работает нормально, но я просто пытаюсь его улучшить, потому что мне кажется, что я неправильно нахожу функцию внутри себя, не закрывая ее прежнее использование, и она просто чувствует себя грязной. конструктивные комментарии пожалуйста.

например. (Теперь это мой фактический код)

import serial 
import sys 
import time 
def enterdata(): 
    ser = serial.Serial(sys.argv[1], sys.argv[2]) 
    ser.write("\r") 
    time.sleep(0.5) 
    while True: 
     data = ser.read(ser.inWaiting()) 
     if (len(data) > 0): 
      a = [] 
      for i in range(len(data)): 
       a.append(data[i]) 
       if "Please press Enter to activate this console." in "".join(a): 
        print ("1") 
        exit(0) 
        break 
     ser.close() 
     enterdata() 
ser = serial.Serial(sys.argv[1], sys.argv[2]) 
ser.write("\r\n") 
enterdata() 

НОВАЯ ВЕРСИЯ ПОКА ОТ Столбы:

import serial 
import sys 
import time 
def enterdata(): 
ser = serial.Serial(sys.argv[1], sys.argv[2]) 
ser.write("\r") 
time.sleep(0.5) 
while True: 
    data = ser.read(ser.inWaiting()) 
    if (len(data) > 0): 
    a = [] 
    for i in range(len(data)): 
    a.append(data[i]) 
    if "Please press Enter to activate this console." in "".join(a): 
    print ('1') 
    return True 
    exit(0) 
    break 
ser.close() 
ser = serial.Serial(sys.argv[1], sys.argv[2]) 
ser.write("\r\n") 
state = False 
while state is not True: 
state = enterdata() 
+7

Это называется бесконечной рекурсии – thefourtheye

+0

Ну .. Вы, кажется, называть 'funName' ** много **. – erip

+0

Какова ваша цель? Печать 'hello' бесконечное количество раз? Пожалуйста, дайте нам ожидаемый результат –

ответ

2

Этот код вы показали даст «RuntimeError: максимальная глубина рекурсии превышена» Ошибка из-за множества Python значение по умолчанию для того, сколько рекурсий может возникать в одной функции за раз.

Любая ваша бесконечна и определенно вызовет проблемы, даже если вы измените этот предел по умолчанию.

Почему бы не сделать цикл самостоятельно и назвать функцию по своему усмотрению?

found = False 
while not found: 
    extracted_data = lookfordata() 
    if extracted_data == "I want it to be equal to this": 
     found = True 

Я вижу, что вы редактировали сообщение. Независимо от того, что вы пытаетесь сделать, этот метод не эффективен, не рекомендуется и не красиво. Все хорошие причины не использовать его.

Представьте, что вы будете обрабатывать некоторые данные, которые больше, чем вы используете сейчас, вы не узнаете, произойдет ли условие остановки рекурсии, прежде чем вы превысите предел. Также не нужно увеличивать лимит все время, когда вы сталкиваетесь с большими данными. Я думаю, что это должна быть цель любого программиста, чтобы избежать повторения и придумывать программы, которые могут обрабатывать любой тип неожиданного ввода.

Вы обновили сообщение. Этот способ обработки ввода намного лучше, чем исходная рекурсия. Просто упомянуть, а не;

for i in range(len(data)): 
    a.append(data[i]) 

использование

for i in data: 
    a.append(i) 
+0

Спасибо, не могли бы вы немного расширить? Im новый для python ... так нравится? в то время как переменная не соответствует действительности:? как вы можете видеть, я обновил функциональный код – TheHidden

+0

Взгляните на новый пример. – Rockybilly

+0

как это (обновлено мой пост) – TheHidden

Смежные вопросы