예제 #1
0
파일: dbutils.py 프로젝트: bport/yokadi
 def acquire(self):
     """Acquire a lock for that task and remove any previous stale lock"""
     lock = self._getLock()
     if lock:
         if lock.updateDate < datetime.now() - 2 * timedelta(seconds=tui.MTIME_POLL_INTERVAL):
             # Stale lock, removing
             TaskLock.delete(lock.id)
         else:
             raise YokadiException("Task %s is already locked by process %s" % (lock.task.id, lock.pid))
     TaskLock(task=self.task, pid=os.getpid(), updateDate=datetime.now())
예제 #2
0
파일: dbutils.py 프로젝트: semtle/yokadi
    def acquire(self, pid=None, now=None):
        """Acquire a lock for that task and remove any previous stale lock"""
        if now is None:
            now = datetime.now()
        if pid is None:
            pid = os.getpid()

        lock = self._getLock()
        if lock:
            if lock.updateDate < now - 2 * timedelta(
                    seconds=tui.MTIME_POLL_INTERVAL):
                # Stale lock, reusing it
                lock.pid = pid
                lock.updateDate = now
            else:
                raise YokadiException(
                    "Task %s is already locked by process %s" %
                    (lock.task.id, lock.pid))
        else:
            # Create a lock
            self.session.add(TaskLock(task=self.task, pid=pid, updateDate=now))
        self.session.commit()
예제 #3
0
파일: dbutils.py 프로젝트: bport/yokadi
 def release(self):
     """Release the lock for that task"""
     # Only release our lock
     lock = self._getLock()
     if lock and lock.pid == os.getpid():
         TaskLock.delete(lock.id)
예제 #4
0
파일: dbutils.py 프로젝트: bport/yokadi
 def _getLock(self):
     """Retrieve the task lock if it exists (else None)"""
     try:
         return TaskLock.select(TaskLock.q.task == self.task).getOne()
     except SQLObjectNotFound:
         return  None