Как использовать «requests» рядом с «grequests»? При подключенных одновременно модулях "requests" и "grequests" при выполнении не асинхронного запроса (requests) падает исключение:Traceback (most recent call last):
File "C:/Users/alxhe/PycharmProjects/YB_Pump/YB_DataGetter.py", line 54, in
act = act_tickers()
File "C:/Users/alxhe/PycharmProjects/YB_Pump/YB_DataGetter.py", line 16, in act_tickers
obj = requests.get(url)
File "C:\Users\alxhe\PycharmProjects\YB_Pump\venv\lib\site-packages\requests\api.py", line 72, in get
return request('get', url, params=params, **kwargs)
File "C:\Users\alxhe\PycharmProjects\YB_Pump\venv\lib\site-packages\requests\api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "C:\Users\alxhe\PycharmProjects\YB_Pump\venv\lib\site-packages\requests\sessions.py", line 508, in request
resp = self.send(prep, **send_kwargs)
File "C:\Users\alxhe\PycharmProjects\YB_Pump\venv\lib\site-packages\requests\sessions.py", line 618, in send
r = adapter.send(request, **kwargs)
File "C:\Users\alxhe\PycharmProjects\YB_Pump\venv\lib\site-packages\requests\adapters.py", line 440, in send
timeout=timeout
File "C:\Users\alxhe\PycharmProjects\YB_Pump\venv\lib\site-packages\urllib3\connectionpool.py", line 601, in urlopen
chunked=chunked)
File "C:\Users\alxhe\PycharmProjects\YB_Pump\venv\lib\site-packages\urllib3\connectionpool.py", line 346, in _make_request
self._validate_conn(conn)
File "C:\Users\alxhe\PycharmProjects\YB_Pump\venv\lib\site-packages\urllib3\connectionpool.py", line 850, in _validate_conn
conn.connect()
File "C:\Users\alxhe\PycharmProjects\YB_Pump\venv\lib\site-packages\urllib3\connection.py", line 314, in connect
cert_reqs=resolve_cert_reqs(self.cert_reqs),
File "C:\Users\alxhe\PycharmProjects\YB_Pump\venv\lib\site-packages\urllib3\util\ssl_.py", line 269, in create_urllib3_context
context.options |= options
File "C:\Users\alxhe\AppData\Local\Programs\Python\Python36\Lib\ssl.py", line 465, in options
super(SSLContext, SSLContext).options.__set__(self, value)
File "C:\Users\alxhe\AppData\Local\Programs\Python\Python36\Lib\ssl.py", line 465, in options
super(SSLContext, SSLContext).options.__set__(self, value)
File "C:\Users\alxhe\AppData\Local\Programs\Python\Python36\Lib\ssl.py", line 465, in options
super(SSLContext, SSLContext).options.__set__(self, value)
[Previous line repeated 323 more times]
RecursionError: maximum recursion depth exceeded while calling a Python object
При отключении grequests обычные запросы проходят на ура. Как победить?

21 Авг 2019 в 06:22
177 +1
0
Ответы
1

Для того чтобы использовать модуль "requests" рядом с "grequests", перед выполнением асинхронных запросов с помощью "grequests", необходимо закрыть сессию модуля "requests". Это можно сделать следующим образом:

import grequests
import requests
# Выполнение одиночного не асинхронного запроса с помощью requests
url = 'http://www.example.com'
response = requests.get(url)
print(response.text)
# Закрытие сессии requests
requests.session().close()
# Выполнение асинхронных запросов с помощью grequests
urls = ['http://www.example.com', 'http://www.example.org']
rs = (grequests.get(u) for u in urls)
responses = grequests.map(rs)
for response in responses:
print(response.text)

Таким образом, вы закрываете сессию модуля "requests" перед выполнением асинхронных запросов с помощью "grequests", что позволит избежать конфликтов между этими двумя модулями.

20 Апр в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 95 172 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир