Как использовать «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
200 +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 Апр 2024 в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир