【发布时间】:2018-06-16 19:28:16
【问题描述】:
我编写了一个 python 脚本,可以在我晚上睡觉时备份我的文件。该程序旨在在计算机开启时运行,并在备份完成后自动关闭计算机。我的代码如下所示:
from datetime import datetime
from os import system
from backup import backup
while True:
today = datetime.now()
# Perform backups on Monday at 3:00am.
if today.weekday() == 0 and today.hour == 3:
print('Starting backups...')
# Perform backups.
backup("C:\\Users\\Jeff Moorhead\\Desktop", "E:\\")
backup("C:\\Users\\Jeff Moorhead\\Desktop", "F:\\")
backup("C:\\Users\\Jeff Moorhead\\OneDrive\\Documents", "E:\\")
backup("C:\\Users\\Jeff Moorhead\\OneDrive\\Documents", "F:\\")
# Shutdown computer after backups finish.
system('shutdown /s /t 10')
break
else:
del today
continue
备份功能来自我编写的另一个文件,用于根据具体情况执行更多自定义备份。这段代码一切正常,但我想知道 del 语句是否
del today
真的很有必要。我认为它会阻止我的内存被数千个日期时间对象填满,但后来我读到 Python 使用垃圾收集,类似于 Java。此外,todayvariable 是否会自动替换为每次通过 while 循环?我知道该程序使用 del 语句按预期工作,但如果它是不必要的,那么为了简洁起见,我想摆脱它!它对记忆的实际影响是什么?
【问题讨论】:
-
不,它没有。它只会减少对象的引用计数。如果要释放内存,请参阅stackoverflow.com/questions/1316767/…
-
根据那篇文章,垃圾收集器似乎会自动为我处理它。因为我不是在处理海量数据,所以我应该没有问题。谢谢!
-
您不会占用大量内存,但会占用大量 CPU,当您仅每周实际执行一次时,尽可能频繁地检查时间,您可能只需计算一下直到您要执行备份的时间,然后在此之前执行
time.sleep。 -
好点,我添加了对 time.sleep() 的调用以每小时检查一次时间。我不想增加一整天的睡眠时间,因为我倾向于在大多数晚上关闭笔记本电脑,这样如果计算机在周一 3:00 时处于睡眠状态,它可能会错过备份时间。