python-3.x - 如何在请求期货中使用“继续”?
问题描述
我有一个代码,我想从网上获取结果。如果互联网连接中断,我希望我的代码等待。但是当我尝试在 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...
我怎样才能解决这个问题?
解决方案
这背后的原因很简单,如果连接丢失,那么即使在开始时您也无法获得成功
使用此代码:
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)
推荐阅读
- python - 在 Python Virtualenv 中安装 DLib 时,CMake 找不到 C 和 C++ 编译器
- nlp - 用附加信息预测句子中的缺失词
- javascript - 如何将嵌套的对象数组转换为数组对象
- c++ - 使用 DXGI 进行窗口捕捉
- python - 没有名为“pm4py”的模块
- python - 在数据框中查找不是 NaN python 的行
- r - 如何在R中的heatmap.2中加粗一组标签或分支
- node.js - MEAN 堆栈 http.post 请求正文为空
- angular - Angular中的粗箭头运算符之后的赋值运算符有什么用?
- java - 将 QuickAccess TextField 添加到 Eclipse RCP 应用程序