Mercurial > kallithea
diff rhodecode/lib/celerylib/__init__.py @ 547:1e757ac98988
renamed project to rhodecode
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Wed, 06 Oct 2010 03:18:16 +0200 |
parents | pylons_app/lib/celerylib/__init__.py@9bedaa073c23 |
children | 14559eb34003 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rhodecode/lib/celerylib/__init__.py Wed Oct 06 03:18:16 2010 +0200 @@ -0,0 +1,60 @@ +from rhodecode.lib.pidlock import DaemonLock, LockHeld +from vcs.utils.lazy import LazyProperty +from decorator import decorator +import logging +import os +import sys +import traceback +from hashlib import md5 +log = logging.getLogger(__name__) + +class ResultWrapper(object): + def __init__(self, task): + self.task = task + + @LazyProperty + def result(self): + return self.task + +def run_task(task, *args, **kwargs): + try: + t = task.delay(*args, **kwargs) + log.info('running task %s', t.task_id) + return t + except Exception, e: + print e + if e.errno == 111: + log.debug('Unnable to connect. Sync execution') + else: + log.error(traceback.format_exc()) + #pure sync version + return ResultWrapper(task(*args, **kwargs)) + + +def locked_task(func): + def __wrapper(func, *fargs, **fkwargs): + params = list(fargs) + params.extend(['%s-%s' % ar for ar in fkwargs.items()]) + + lockkey = 'task_%s' % \ + md5(str(func.__name__) + '-' + \ + '-'.join(map(str, params))).hexdigest() + log.info('running task with lockkey %s', lockkey) + try: + l = DaemonLock(lockkey) + ret = func(*fargs, **fkwargs) + l.release() + return ret + except LockHeld: + log.info('LockHeld') + return 'Task with key %s already running' % lockkey + + return decorator(__wrapper, func) + + + + + + + +