##// END OF EJS Templates
Added tag v0.8.3 for changeset ca41d544dbdf
Added tag v0.8.3 for changeset ca41d544dbdf

File last commit:

r497:fb0c3af6 celery
r500:5a650ddd default
Show More
__init__.py
66 lines | 1.6 KiB | text/x-python | PythonLexer
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))
class LockTask(object):
"""LockTask decorator"""
def __init__(self, func):
self.func = func
def __call__(self, func):
return decorator(self.__wrapper, func)
def __wrapper(self, func, *fargs, **fkwargs):
params = []
params.extend(fargs)
params.extend(fkwargs.values())
lockkey = 'task_%s' % \
md5(str(self.func) + '-' + '-'.join(map(str, params))).hexdigest()
log.info('running task with lockkey %s', lockkey)
try:
l = DaemonLock(lockkey)
return func(*fargs, **fkwargs)
l.release()
except LockHeld:
log.info('LockHeld')
return 'Task with key %s already running' % lockkey