Chciałbym wysłać asynchroniczne żądanie HTTP POST przy użyciu gevent
- Nie zależy mi na odpowiedzi, po prostu chcę wykonać żądanie tak szybko, jak to możliwe. Jednak za każdym razem, gdy próbuję to zrobić, używając gevent.spawn
, żądanie nigdy nie zostanie wykonane. Wiem o tym, ponieważ wywoływanie metod .ready()
lub .successful()
na urządzeniu Greenlet
, które jest zwracane z gevent.spawn
, zawsze zwraca wartość False
.Dlaczego gevent.spawn nie wykonuje sparametryzowanej funkcji do momentu wywołania Greenlet.join?
Jednak Greenlet został rozpoczął, bo jeśli zadzwonię glet = gevent.spawn(...)
, następnie glet.start()
, pojawia się błąd mówiący AssertionError: Greenlet already started
.
Jednoraz dostaję glet.ready() == True
, gdy zadzwonię pod numer glet.join()
, ale jest to operacja blokowania. Jak mogę wykonać Greenlet bez czekania na zakończenie?
Ah, który wydaje się działać! Jednak, gdy używam biblioteki grequests (https://github.com/kennethreitz/grequests), wywołanie grequests.send (grequests.request ("POST",)) tworzy zieloną ulotkę, ale ta zielona wykonać nawet po wywołaniu gevent.sleep(). Czy wiesz, dlaczego tak jest? –
neptune
@neptune: Zobacz aktualizację – FatalError