pselect exited on first exception
Due to eventlet bug in GreenPool implementation when first spawned thread threw exception imap method exited immediately without waiting for other spawned threads to accomplish. Issue in eventlet github: https://github.com/eventlet/eventlet/issues/232 This commits wraps executed functions so that no exception can be raised on imap boundary and then unwraps result after execution Closes-Bug: #1449497 Change-Id: I0e99de8e0711071c4a009e37a58ec22761e90e6c
This commit is contained in:
parent
c0786b374f
commit
6a027bf11e
@ -145,8 +145,22 @@ def generate_id():
|
||||
|
||||
|
||||
def parallel_select(collection, func):
|
||||
# workaround for eventlet issue 232
|
||||
# https://github.com/eventlet/eventlet/issues/232
|
||||
def wrapper(element):
|
||||
try:
|
||||
return func(element), False, None
|
||||
except Exception as e:
|
||||
return e, True, sys.exc_info()[2]
|
||||
|
||||
gpool = eventlet.greenpool.GreenPool()
|
||||
return list(gpool.imap(func, collection))
|
||||
result = list(gpool.imap(wrapper, collection))
|
||||
try:
|
||||
exception = next(t for t in result if t[1])
|
||||
except StopIteration:
|
||||
return map(lambda t: t[0], result)
|
||||
else:
|
||||
raise exception[0], None, exception[2]
|
||||
|
||||
|
||||
def to_python_codestyle(name):
|
||||
|
Loading…
Reference in New Issue
Block a user