Запрос зависает при использовании gevent - PullRequest
0 голосов
/ 01 августа 2020

Я делаю небольшой инструмент, который использует steam и должен выполнять запросы. Основной l oop занят приложением TKinter, поэтому для предотвращения зависания мне нужно каким-то образом многопоточность, но поскольку библиотека Steam использует gevent, мне, кажется, приходится использовать gevent для имитации многопоточности. (По крайней мере, я не нашел способа обойти это)

Проблема в том, что как только я выполняю запрос в отдельном потоке gevent, запрос больше не работает и никогда не завершается.

Вот небольшой пример, демонстрирующий мою проблему

# Patching doesn't help
#from gevent import monkey
#monkey.patch_all()

import steam.client
import requests
import gevent
import time

def work():
  response = requests.get("https://google.com/")
  # This never gets executed
  print(response)

if __name__ == "__main__":
  # Do anything with steam library... (Not necessary to reproduce issue but just so the import is used) 
  client = steam.client.SteamClient()

  print("STARTING")
  gevent.spawn(work)
  gevent.sleep(0)

  # Simulate process
  while True:
    pass

Я что-то здесь делаю не так? Большинство вещей, которые я нашел во время поиска, предлагали не устанавливать патчи вообще или слишком поздно, это могло вызвать это, но если я добавлю, что ничего не изменится.

Также обратите внимание, что я никогда раньше не использовал gevent. Приносим извинения, если проблема в том, что я неправильно использовал команду spawn, это именно то, что я нашел в Интернете при поиске

EDIT

Хорошо, причина, по которой я использовал gevent.spawn вместо threading было то, что requests.Session, который я использовал, с этим не работал. Поскольку я удалил объект Session, я никогда не пытался снова использовать потоки и поэтому не осознавал, что без него он работает. Тем не менее, я оставлю это открытым, потому что я до сих пор не понимаю, почему запрос в моем примере зависает, и это может быть полезно в будущем.

...