如何获取代码执行时间?实现密码生成器的超时检测逻辑
密码生成器执行时间检测需求及代码优化
我需要获取代码的执行时间,以此实现条件判断:当执行时间超过5秒时,执行后续代码。我正在开发一款密码生成器,可生成以指定字符开头或结尾的密码。当因无符合条件的密码导致打印功能“冻结”无输出时,需借助执行时间检测处理该情况。
当前代码如下:
while True: sample = random.sample(string, lenght) x = '' if x in passwords: continue else: if starts["enabled"] == True or ends['enabled'] == True: counter += 1 x = ''.join(sample) if starts['enabled'] == True and ends['enabled'] == True: if x.startswith(starts['startWith']) and x.endswith(ends['endWith']): if x in passwords: continue else: print(f"# {counter}. {x}") passwords.append(x) if starts['enabled'] == False and ends['enabled'] == False: if x in passwords: continue else: print(f"# {counter}. {x}") passwords.append(x) if starts['enabled'] == True and ends['enabled'] == False: if x.startswith(starts['startWith']): if x in passwords: continue else: print(f"# {counter}. {x}") passwords.append(x) if starts['enabled'] == False and ends['enabled'] == True: if x.endswith(ends['endWith']): if x in passwords: continue else: print(f"# {counter}. {x}") passwords.append(x) else: counter += 1 x = ''.join(sample) print(f"# {counter}. {x}") if timeit.timeit('print(f"# {counter}. {x}")', number=1) >= 5: print("Thats all..") pass if len(passwords) == len_pass or len(passwords) <= len_pass: if len(passwords) == len(string) ** lenght: print("\n") print(f"{passwords}\n") break if len(passwords) == len_pass: print("\n") print(f"{passwords}\n") break
问题分析与修正方案
原代码中用timeit.timeit检测打印语句的执行时间是错误的,它无法反映整个循环的实际运行时长。正确做法是记录循环启动的时间,实时计算已消耗时长,当超过5秒时触发终止逻辑。
优化后的代码示例
import time import random import string # 假设以下变量已提前定义 string = "abc123" lenght = 4 len_pass = 10 passwords = [] counter = 0 starts = {"enabled": True, "startWith": "a"} ends = {"enabled": False, "endWith": "3"} # 记录循环开始时间 start_time = time.time() while True: # 计算已运行时长,超过5秒则终止 elapsed_time = time.time() - start_time if elapsed_time >= 5: print("已无符合条件的密码可生成") break sample = random.sample(string, lenght) x = ''.join(sample) # 跳过已生成的重复密码 if x in passwords: continue counter += 1 # 统一判断密码是否符合开头/结尾要求 valid = False if starts["enabled"] and ends["enabled"]: valid = x.startswith(starts['startWith']) and x.endswith(ends['endWith']) elif starts["enabled"]: valid = x.startswith(starts['startWith']) elif ends["enabled"]: valid = x.endswith(ends['endWith']) else: valid = True # 无限制则默认有效 if valid: print(f"# {counter}. {x}") passwords.append(x) # 检查是否达到生成数量上限或穷尽所有可能密码 if len(passwords) >= len_pass or len(passwords) == len(string) ** lenght: print("\n") print(f"{passwords}\n") break
优化说明
- 时间检测逻辑修正:用
time.time()记录起始时间,实时计算循环运行时长,准确捕捉无输出的“冻结”状态。 - 代码结构简化:将多分支的条件判断合并为
valid变量的统一判断,减少冗余代码,提升可读性。 - 重复密码提前过滤:生成密码后立即检查是否已存在,避免后续无效的条件判断。
- 终止条件优化:简化原代码中冗余的长度判断逻辑,使终止条件更清晰。
内容的提问来源于stack exchange,提问作者Vidmo
相关产品推荐
相关产品推荐

