优化 这段代码 def cron(self) -> None: """定时器方法""" logging.info("进入执行定时重启的定时器方法") try: jobs = BlockingScheduler() for enable, shell, host, username, passwd, aliasname, port in zip(self.yml_enable, self.yml_shell, self.yml_ssh_host, self.yml_ssh_username, self.yml_ssh_passwd, self.yml_aliasname, self.yml_ssh_port): if enable: jobs.add_job(ssh_client, CronTrigger.from_crontab(yml()['restart-cron'], timezone='PRC'), kwargs={ 'ip': host, 'username': username, 'password': passwd, 'command': shell, 'aliasname': aliasname, 'port': port }) jobs.start() except Exception as e: logging.error("apscheduler定时器方法执行报错%s\n详细:%s" % (e, traceback.format_exc()))
时间: 2023-12-10 21:38:35 浏览: 128
这段代码的性能瓶颈主要在于每次循环都会执行一次 `yml()` 函数。可以将其提取到循环外面,只执行一次,然后传入循环中使用。另外,每次循环中都需要获取 6 个变量,可以考虑使用 zip() 函数将它们打包成元组,然后一次性解包。
重构后的代码如下:
```
def cron(self) -> None:
"""定时器方法"""
logging.info("进入执行定时重启的定时器方法")
try:
jobs = BlockingScheduler()
yml_values = zip(self.yml_enable, self.yml_shell, self.yml_ssh_host,
self.yml_ssh_username, self.yml_ssh_passwd, self.yml_aliasname,
self.yml_ssh_port)
cron = CronTrigger.from_crontab(yml()['restart-cron'], timezone='PRC')
for enable, shell, host, username, passwd, aliasname, port in yml_values:
if enable:
jobs.add_job(ssh_client, cron,
kwargs={
'ip': host,
'username': username,
'password': passwd,
'command': shell,
'aliasname': aliasname,
'port': port
})
jobs.start()
except Exception as e:
logging.error("apscheduler定时器方法执行报错%s\n详细:%s" % (e, traceback.format_exc()))
```
这样做可以减少不必要的计算和内存开销,提高代码运行效率。
阅读全文