class Locker(object):
_lock = threading.Lock()
def lock(self, func):
def method(self, *args, **kwargs):
self._lock.acquire()
result = func(self, *args, **kwargs)
self.lock.release()
return result
return method
class Manager(Locker, object):
@self.lock
def get_task(self):
time_touched_limit = (datetime.now() - timedelta(seconds=Domain.time_touched_timeout))
try:
domain = Domain.objects.filter(time_touched__lt=time_touched_limit)[0]
except IndexError:
domain = None
else:
domain.time_touched = datetime.now()
domain.save()
return domain