X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fdakmultiprocessing.py;fp=daklib%2Fdakmultiprocessing.py;h=ded81a2902cf975161cb2c20d372a7f9bb1a477c;hb=456b7dde5f862666d82f4e8f48234f08a941fb9a;hp=646f3633f0e4ffeca3fa270f3b4dafe114b68075;hpb=657d989f7e2a9409c29da41d42fda85bcf8a64e2;p=dak.git diff --git a/daklib/dakmultiprocessing.py b/daklib/dakmultiprocessing.py index 646f3633..ded81a29 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,7 +41,9 @@ 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()