Ich möchte eine asynchrone HTTP-POST-Anfrage mit gevent
- Ich interessiere mich nicht für die Antwort, ich möchte einfach die Anfrage so schnell wie möglich ausführen. Wenn ich dies jedoch unter Verwendung von gevent.spawn
versuche, wird die Anforderung nie ausgeführt. Ich weiß das, weil der Aufruf der .ready()
oder .successful()
Methoden auf der Greenlet
, die von gevent.spawn
zurückgegeben wird, immer False
zurückgibt.Warum führt gevent.spawn die parametrierte Funktion erst bei einem Aufruf von Greenlet.join aus?
Allerdings hat der Greenlet begonnen, denn wenn ich glet = gevent.spawn(...)
nennen, dann glet.start()
, ich einen Fehler sagen AssertionError: Greenlet already started
.
Die einzige Zeit, die ich bekomme glet.ready() == True
ist, wenn ich glet.join()
aufrufen, aber das ist eine blockierende Operation. Wie kann ich das Greenlet ausführen lassen, ohne darauf warten zu müssen, dass es vollständig ist?
Ah scheint das zu funktionieren! Wenn ich jedoch die Bibliothek grequests (https://github.com/kennethreitz/grequests) benutze, erzeugt das Aufrufen von grequests.send (grequests.request ("POST",)) ein Greenlet, aber dieses Greenlet nicht Ausführen auch nach dem Aufruf von gevent.sleep(). Weißt du warum das so ist? –
neptune
@neptune: Siehe Update – FatalError