X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fdakmultiprocessing.py;h=8e66cfdb177342f94b7adcbac1c1c23e47674ba4;hb=8b9feb3d8f0ac833d6980a3c12fbe07afa0da44c;hp=646f3633f0e4ffeca3fa270f3b4dafe114b68075;hpb=67bc14539b91a77d841b02b76444fdd62206d896;p=dak.git diff --git a/daklib/dakmultiprocessing.py b/daklib/dakmultiprocessing.py index 646f3633..8e66cfdb 100644 --- a/daklib/dakmultiprocessing.py +++ b/daklib/dakmultiprocessing.py @@ -26,6 +26,14 @@ multiprocessing for DAK ############################################################################### import multiprocessing +import sqlalchemy.orm.session + +def _func_wrapper(func, *args, **kwds): + try: + return func(*args, **kwds) + finally: + # Make sure connections are closed. We might die otherwise. + sqlalchemy.orm.session.Session.close_all() class Pool(): def __init__(self, *args, **kwds): @@ -33,14 +41,16 @@ class Pool(): self.results = [] def apply_async(self, func, args=(), kwds={}, callback=None): - self.results.append(self.pool.apply_async(func, args, kwds, callback)) + wrapper_args = list(args) + wrapper_args.insert(0, func) + self.results.append(self.pool.apply_async(_func_wrapper, wrapper_args, kwds, callback)) def close(self): self.pool.close() def join(self): self.pool.join() - for r in self.results: - # return values were already handled in the callbacks, but asking - # for them might raise exceptions which would otherwise be lost - r.get() + #for r in self.results: + # # return values were already handled in the callbacks, but asking + # # for them might raise exceptions which would otherwise be lost + # r.get()