首页 > 解决方案 > 如何在请求期货中使用“继续”?

问题描述

我有一个代码,我想从网上获取结果。如果互联网连接中断,我希望我的代码等待。但是当我尝试在 for 循环中执行 continue 语句时,它给了我一些棘手的结果。而且我不知道如何解决。

代码:

import requests
import time
from requests.exceptions import ConnectionError
from requests_futures.sessions import FuturesSession

def wait_for_con():
    con = False
    while not con:
        try:
            response = requests.get("https://google.com")
            if response.status_code == 200:
                con = True
        except ConnectionError:
            time.sleep(1)



def run (targets):
    with FuturesSession() as session:
        futures = [session.get(target) for target in targets]
        for future in futures:
            try:
                result = future.result()
                status = result.status_code
                print (str(status)+"    "+result.url)
                
            except ConnectionError:
                print ("waitng for connection")
                wait_for_con()
                continue
run(my_url_list)

当我尝试离线运行它并上网时,它一次又一次地打印“等待连接”。

输出:

waiting for connection
waiting for connection
waiting for connection
waiting for connection
waiting for connection
waiting for connection
waiting for connection
waiting for connection
waiting for connection

Printing Continues... 

我怎样才能解决这个问题?

标签: python-3.xfor-looprequestcontinuerequests-futures

解决方案


这背后的原因很简单,如果连接丢失,那么即使在开始时您也无法获得成功
使用此代码:

import requests
import time
from requests.exceptions import ConnectionError
from requests_futures.sessions import FuturesSession


def wait_for_con():
    con = False
    while not con:
        try:
            response = requests.get("https://google.com")
            if response.status_code == 200:
                con = True
                print("connect")
        except ConnectionError:
            print("trying")
            time.sleep(1)


def run(targets):
    with FuturesSession() as session:
        futures = [session.get(target) for target in targets]
        n = len(futures)
        while (n):

            try:
                n -= 1
                result = futures[n].result()
                status = result.status_code
                print(str(status) + "    " + result.url)

            except ConnectionError:
                print("waitng for connection")
                wait_for_con()
                time.sleep(1)
                print("connection stable")
                futures = [session.get(target) for target in targets]

                # result = future.result()
                # status = result.status_code
                # print(str(status)+"    "+result.url)


my_url_list = ['https://pypi.org/project/requests-futures/',
               'https://pypi.org/project/requests-futures/',
               'https://pypi.org/project/requests-futures/',
               ]
run(my_url_list)

推荐阅读