我应该将临时文件存储在__pycache__文件夹中吗?

时间:2016-04-03 22:29:23

标签: python python-3.x

我正在为Python 3编写一个memoizing装饰器。计划是在一个临时文件中挑选缓存,以节省多次执行的时间。

如果包含修饰函数的文件已更改,则将删除缓存,就像__pycache__中的.pyc文件一样。然后我开始考虑通过将pickle缓存放在__pycache__中来整理用户的项目目录。在此目录中存储文件有副作用吗?这是误导或混淆?

1 个答案:

答案 0 :(得分:0)

你应该......

  • 让所有缓存都在运行时发生:这超出了您的目的。但是,这是完全不接触文件系统的唯一方法。
  • 专注于__memo__之类的特殊文件夹:这将允许您跨多次执行进行缓存。但是,您将“污染”应用程序的文件结构。

永远不会陷入__pycache__的原因:

  • __pycache__是特定于CPython的。虽然它很可能是你现在正在使用的实现,但是假设每个人都没有充分理由这样做是不可移植/安全/良好的做法。
  • __pycache__旨在作为透明优化,也就是说,任何人都不应该关心它是否存在。这是CPython人员的设计决定,所以你不应该绕过它。
  • 由于上述原因,如果用户想要,可以禁用上述目录。例如,在CPython中,如果你执行python3 -B myapp.py,如果它不存在,则不会创建__pycache__,否则将被忽略。
  • 由于以上两点,用户经常会删除__pycache__,原因有几个。我至少做到了。
  • __pycache__内部的内容弄乱,因为“它不会污染应用程序的文件结构”是一种错觉。该目录可以完美地被视为“污染”。如果Python解释器已经污染了东西,为什么不能使用__memo__呢?