Mercurial > kallithea
view pylons_app/lib/celerylib/__init__.py @ 512:d945c95ba4ac
refactoring for new vcs implementation
renamed all ._short and .raw_id into .short_id
updated dependency for vcs to 0.1.6
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Tue, 28 Sep 2010 20:25:58 +0000 |
parents | 9bedaa073c23 |
children |
line wrap: on
line source
from pylons_app.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)