如何为 python 脚本的多次运行一次性缓存导入的模块?
How to cache imported modules once off for multiple runs of a python script?
我有一个 python 脚本,我想使用 cron 作业以 1 分钟为基础定期 运行。该脚本每次 运行 时都会导入一些 python 模块和配置文件。问题是,所有导入都会产生很大的开销(1-2 分钟)。 (模块和文件都比较小,总大小只有15MB,可以轻松装进内存)。
导入所有内容后,脚本的其余部分 运行 相对较快(大约 0.003 秒;计算要求不高)。
是否可以缓存所有导入,一次,第一次脚本是 运行,这样所有后续脚本都是 运行 就不需要导入模块并重新归档?
不,你不能。您将不得不使用持久性存储,例如 shelve, or something in-memory such as SQLite,您可以在其中存储在会话之间持续存在的任何昂贵计算,随后您只需从 memory/disk 中读取这些结果,具体取决于您选择的存储。
此外,请注意 modules are, in fact, being cached upon import 以缩短加载时间,但是,不是在内存中,而是在磁盘上,因为 __pychache__
下的 .pyc
个文件和每个文件的导入时间se 通常是微不足道的,所以你的导入花费那么长时间不是因为导入本身,而是因为这些模块内部的计算,所以你可能想要优化它们。
你不能做你想做的原因是因为为了 将数据保存在内存中,进程必须保持 运行ning。内存属于进程 运行ning 脚本,一旦该脚本完成,内存就会被释放。 See here 了解有关您的问题的更多详细信息。
你不能只 运行 一个脚本,然后用你的任何计算填充内存,直到你可能 运行 下一次,因为,首先,内存不知道什么时候其他时间(可能是 1 分钟后,可能是 1 年后),其次,如果您能够做到这一点,那么想象一下当不同的脚本来自OS 中的不同应用程序(不仅仅是你的程序)会用它们的计算结果填充内存。
所以你可以 运行 你的代码在一个无限循环中休眠(并保持进程活跃)或者你可以使用 crontab 并将你以前的结果存储在某个地方。
我有一个 python 脚本,我想使用 cron 作业以 1 分钟为基础定期 运行。该脚本每次 运行 时都会导入一些 python 模块和配置文件。问题是,所有导入都会产生很大的开销(1-2 分钟)。 (模块和文件都比较小,总大小只有15MB,可以轻松装进内存)。
导入所有内容后,脚本的其余部分 运行 相对较快(大约 0.003 秒;计算要求不高)。
是否可以缓存所有导入,一次,第一次脚本是 运行,这样所有后续脚本都是 运行 就不需要导入模块并重新归档?
不,你不能。您将不得不使用持久性存储,例如 shelve, or something in-memory such as SQLite,您可以在其中存储在会话之间持续存在的任何昂贵计算,随后您只需从 memory/disk 中读取这些结果,具体取决于您选择的存储。
此外,请注意 modules are, in fact, being cached upon import 以缩短加载时间,但是,不是在内存中,而是在磁盘上,因为 __pychache__
下的 .pyc
个文件和每个文件的导入时间se 通常是微不足道的,所以你的导入花费那么长时间不是因为导入本身,而是因为这些模块内部的计算,所以你可能想要优化它们。
你不能做你想做的原因是因为为了 将数据保存在内存中,进程必须保持 运行ning。内存属于进程 运行ning 脚本,一旦该脚本完成,内存就会被释放。 See here 了解有关您的问题的更多详细信息。
你不能只 运行 一个脚本,然后用你的任何计算填充内存,直到你可能 运行 下一次,因为,首先,内存不知道什么时候其他时间(可能是 1 分钟后,可能是 1 年后),其次,如果您能够做到这一点,那么想象一下当不同的脚本来自OS 中的不同应用程序(不仅仅是你的程序)会用它们的计算结果填充内存。
所以你可以 运行 你的代码在一个无限循环中休眠(并保持进程活跃)或者你可以使用 crontab 并将你以前的结果存储在某个地方。