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()