Python ждать, пока?

#python

#python

Вопрос:

Я получаю данные из ранее запрошенного URL. Пока все работает.

Моя проблема: я пытаюсь выполнять запрос каждые X секунд, и если запрос показывает другое значение, что-то должно быть сделано. Но он выводит решение-захват, даже когда finalresponseback != notready

  responseback = requests.get('https://2captcha.com/res.php?json=1amp;action=getamp;key='   apikey   "amp;id="   finalrequest)
  
  responseback_json = responseback.json()
 finalresponseback = responseback_json['request']
 print(responseback_json)
 notready = (str("CAPCHA_NOT_READY"))



 while(finalresponseback == notready):
     print("Solving-Capture...")
     if finalresponseback != notready:
         print("Entering...")
  

Комментарии:

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

2. Ты пробовал time.sleep() ? Я думаю, таким образом вы можете делать разрыв между каждым запросом каждые X секунд.

Ответ №1:

Это из-за того, как вы написали свой код, допустим, что finalresponseback не готов, тогда это произойдет:

 while(finalresponseback == notready): # This would enable the loop because it's equal to not ready
    print("Solving-Capture...") # It would print this
    if finalresponseback != notready: # Nothing would happen because it is equal to notready
        print("Entering...") # This woudln't happen
  

Однако, если вдруг это изменится:

 while(finalresponseback == notready): # This happened before it changed
    print("Solving-Capture...") # This also happened before it changed, so it happens anyway
    if finalresponseback != notready: # This happens too
        print("Entering...") # And so does this, so therefore it would print both statements
  

Этот код плох, потому что, если он изменится на not be notready, тогда он выйдет из цикла без каких-либо действий, если он не изменится во время выполнения цикла, лучшей версией этого будет:

 while(1): # Starts a loop
    if finalresponseback != notready: # Checks finalresponseback
        print("Entering...") # Prints statement
        break # Exits loop
    else: # If it is equal to notready
        print("Solving-Capture...") # Print statement
  

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

И, наконец, мы можем добавить:

 responseback_json = responseback.json()
finalresponseback = responseback_json['request']
  

к коду для запроса каждые x секунд, как так:

 import time # Add to top of code, imports the time library
x = 2 # Sets the x variable
while(1): # Starts a loop
    responseback_json = responseback.json()
    finalresponseback = responseback_json['request']
    if finalresponseback != notready: # Checks finalresponseback
        print("Entering...") # Prints statement
        break # Exits loop
    else: # If it is equal to notready
        print("Solving-Capture...") # Print statement
    time.sleep(x)
  

И, наконец, совет по оптимизации вашего кода, вместо

 notready = (str("CAPCHA_NOT_READY"))
  

Вы можете сделать

 notready = "CAPCHA_NOT_READY"
  

Это потому, что это уже строковое значение (как указано речевыми знаками «»)