loopingcall用于专门检测某个task是否完成了,比sleep优雅多了

from oslo_service import loopingcall

def wait_del_backup():
            start_time = int(time.time())
            timeout = 120
            del_backup = cinder_client.backups.list(
                search_opts={'id': backup_id})
            if len(del_backup) == 0:
                logging.info("Delete backup %s complete" % backup_id)
                raise loopingcall.LoopingCallDone()
            if del_backup[0].status in ['error', 'error_deleting']:
                raise Exception("Delete backup %s failed, "
                                "the status of backup is %s."
                                % (backup_id, del_backup[0].status))
            if (del_backup[0].status == 'deleting') and (int(time.time()) -\
                    start_time > timeout):
                logging.error("Delete backup %s failed, In a state of "
                              "deleting over 120s")
                raise
                
timer = loopingcall.FixedIntervalLoopingCall(wait_del_backup)
timer.start(interval=0.5).wait()


具体使用看源码:https://github.com/openstack/oslo.service/blob/master/oslo_service/loopingcall.py