2

想知道 python 是否能够在给定 py 的编译阶段对 pyc 进行检查,以防止由于系统(和磁盘)突然断电而损坏 pyc。当系统重新启动时,是否会检查可能存在的 pyc 的完整性,如果它被认为是可疑的,是否会重新生成?

4

2 回答 2

0

如果我正确解释此消息,Python 3.3 将创建.pyc一个不同名称的文件,并在成功完成后重命名它。我认为这是在这种情况下的“原子”(他们的术语),它肯定会保护你免受突然崩溃或断电的影响。早期版本(包括 2.* 分支)显然仍然受制于竞争条件和无效.pyc文件。

但是,文件是否会在不触发运行时异常的情况下无效是一个单独的问题。问题报告都在谈论导入失败。

于 2013-06-10T18:01:24.837 回答
0

据我所知,编译到字节码的过程make在处理重新编译方面与正常工作相同。它检查编译后的文件是否比源文件旧,如果是,则重新编译,如果不是,则保留它们。我最好的建议是在怀疑突然断电时清除 PYC 文件并导入新文件(您也可以自动执行此操作,以使其更简单)。

请注意,我没有尝试查看 Python 是否会等到字节码文件完成后再写入磁盘;如果是这样,那将减少您所说的那种损坏的可能性,因为如果在实际编译期间发生电源故障,则 PYC 文件根本不会被写入磁盘。但是,如果在写入过程中发生断电,损坏仍然是一个问题,因为我相信大多数操作系统会在使用写入访问权限打开文件而不是在文件句柄关闭时更新文件的修改时间。

于 2013-06-10T16:33:23.703 回答