Я делаю небольшой инструмент, который использует 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, я никогда не пытался снова использовать потоки и поэтому не осознавал, что без него он работает. Тем не менее, я оставлю это открытым, потому что я до сих пор не понимаю, почему запрос в моем примере зависает, и это может быть полезно в будущем.