python - 需要为等待执行某些操作的函数添加上限
问题描述
有一个功能可以检查列表中是否包含项目。如果列表中有任何项目,它将等待 5 秒并在 while 循环中再次检查该列表。
以下是示例:
from time import sleep
def list_unfinished_jobs():
''' Any operation performed it creates jobs and
IDs of jobs gets fetch in get_jobs() method
:return : list of job ids or None if no jobs found
'''
jobs = get_jobs() # ['JID_1213133', 'JID_3131314', 'JID_23242242']
return jobs
def wait_for_job_completion():
while list_unfinished_jobs():
sleep(5)
现在我有一个场景,操作可能会卡住,作业无法完成,get_jobs() 永远不会变空。
所以我写了一个逻辑,它检查 20 次工作是否已经完成。每次它休眠 5 秒,我会减少迭代时的时间。下面是代码:
def wait_for_job_completion(node):
"""Wait for job to complete
:param node: an ironic node object.
"""
retries = 20
while retries > 0:
if not list_unfinished_jobs(node):
return
if list_unfinished_jobs(node):
sleep(wait_clock)
retries -= 1
if retries == 0:
err_msg = "Timed out waiting for the job to clear"
LOG.error(err_msg)
raise exception.DracOperationError(error=msg)
我需要另一种方法来检查任何功能 n 次以执行 n 操作。
任何帮助将不胜感激。提前致谢。
解决方案
你没有说为什么你想要一种不同的方式来做这件事。但如果是缩短代码的问题,则可以进行一些“改进”。
您不必调用 list_unfinished_jobs 两次:
if not list_unfinished_jobs(node):
return
else:
sleep(wait_clock)
在这里使用 for 循环也更有意义:
for attempt in range(20):
if not list_unfinished_jobs(node):
return
else:
sleep(wait_clock)
err_msg = "Timed out waiting for the job to clear"
LOG.error(err_msg)
raise exception.DracOperationError(error=msg)
推荐阅读
- javascript - 如何请求 API 并将其发送到前台
- r - 在同一图表中选择并绘制两天之间的夜间时间
- azure-devops - OData Query 是否有任何 Azure DevOps 数据保留期?
- c++ - C++ 可变参数函数就地对参数进行排序
- sas - SAS 编程:根据现有列的后缀创建新列
- node.js - 当我们有默认工作池时为什么要“worker_threads”?
- mongodb - MongoDB:在“插入”后通过“_id”“查找”文档是否有意义?
- c - 使用递归删除链表中所有出现的数字
- android - Android 工作资料应用程序:如何推送和拉取数据
- apache-spark - 避免在 pyspark 中对多个连接进行洗牌和长期计划