Gevent Verständnisfragen
Verfasst: Mittwoch 20. November 2013, 12:29
Hallo,
ich habe ein paar Probleme gevent richtig zu verstehen:
Zur Ausgangslage:
Ein udp Server der Aufträge entgegennimmt und greenlets startet:
Dann folgt in prepareWork:
Dann in startWork:
Ich würde gerne die longRunningFunction mit einem Timeout versehen. Da gibt es bei gevent verschiedene Ansätze
Was sind da genau die Unterschiede und wenn ich startWork mehrmals hintereinander aufrufe, bevor die longRunningFunction von einem vorherigen greenlet beendet wurde, wird dann worker jedesmal überschrieben und ein evtl timeout weitergeführt obwohl er sich eigtl resetten sollte?
Zum Schluss noch ein Beispiel was ich nicht verstehe:
Warum ist die Ausgabe True und nicht Timer failed
ich habe ein paar Probleme gevent richtig zu verstehen:
Zur Ausgangslage:
Ein udp Server der Aufträge entgegennimmt und greenlets startet:
Code: Alles auswählen
def UPDServer():
.....
data,addr = UDPSock.recvfrom(1024)
gevent.spawn(prepareWork, data)
.....
Dann folgt in prepareWork:
Code: Alles auswählen
...
for d in data.split():
gevent.spawn(startWork, d)
...
Code: Alles auswählen
....
worker = gevent.spawn(longRunningFunction, d)
worker.join()
....
Code: Alles auswählen
import gevent
from gevent import Timeout
def wait():
gevent.sleep(2)
timer = Timeout(1).start()
thread1 = gevent.spawn(wait)
try:
thread1.join(timeout=timer)
except Timeout:
print('Thread 1 timed out')
# --
timer = Timeout.start_new(1)
thread2 = gevent.spawn(wait)
try:
thread2.get(timeout=timer)
except Timeout:
print('Thread 2 timed out')
# --
try:
gevent.with_timeout(1, wait)
except Timeout:
print('Thread 3 timed out')
Zum Schluss noch ein Beispiel was ich nicht verstehe:
Code: Alles auswählen
def timer():
time.sleep(12)
return "ok"
def main():
result = False
with gevent.Timeout(5, False):
timer()
result = True
print result
if result == False:
print "Timer failed"
main()