Подождите, пока соединение inte rnet не вернется python (многопоточные вызовы API) - PullRequest
0 голосов
/ 04 мая 2020

У меня есть приложение python, которое использует многопоточность для выполнения нескольких вызовов API. Мне нужно, чтобы потоки выполняли вызовы API внутри оператора try / исключением, и когда я запускаю свою программу без соединения inte rnet, она попадает в предложение exc (URLError). Проблема в том, что я хочу, чтобы потоки подождали, пока соединение с inte rnet снова не станет активным.

Если я создаю 10 потоков, я получаю 10 сообщений об ошибках. Как я могу заставить другие потоки ждать, пока соединение inte rnet снова станет активным?

Вот функция, которую выполняет каждый поток:

def function_thread():
    for i in range (3):   #I try to do the API call 3 times
        try:
            #Here is where I do the API call
        except urllib.error.URLError: #Error: Name or service not known
            print('Revise su conexion a internet')
            self.isConnected = False
            break   #This break statement will lead to the if condition below
        else:
            break   #This break will stop the cycle cause the API call was successful
    else:
        #Here is where I need to deal with user DISCONNECTED

    if not self.isConnected:
        #Here I do the same as the else statement above

Я ищу решение, которое не ' Это приводит к зависанию процессора. Я читал некоторые ответы из stackoverflow, но все они рекомендуют использовать некоторое время l oop, и это заставляет мой процессор перегружаться.

1 Ответ

0 голосов
/ 04 мая 2020

Да, я предлагаю использовать некоторое время l oop, и чтобы убрать нагрузку на процессор, вы можете использовать time.sleep, чтобы уменьшить его. Если вы сделаете это было 2 - 5 секунд, это может значительно уменьшить нагрузку на процессор. Использование (псевдокодей sh python):

import time
while True:
    try:
        # internet connection stuff
        break
    except NoInternet:
        time.sleep(2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...