def __del__(self):
    if self._lock is not None:
      logging.error('Job:%s is being cleaned, but lock was not released: %r' % (self._name, self._lock))
There's no point in attempting to release the lock in the destructor, it's much too unreliable.
dataset/ETHPy150Open viewfinderco/viewfinder/backend/db/job.py/Job.__del__