Sha*_*hin 8 python linux memory fedora disk
我有一个长期运行的Python进程,它产生的数据比我计划的要多.我的结果存储在一个列表中,该列表将在程序完成时被序列化(pickle)并写入磁盘 - 如果它到达那么远.但是按照这个速度,列表更有可能耗尽所有1 GB以上的可用RAM,并且该过程将崩溃,从而在此过程中丢失所有结果.
我计划修改我的脚本以定期将结果写入磁盘,但是如果可能的话,我想保存当前正在运行的进程的结果.有没有什么方法可以从正在运行的进程中获取内存中的数据结构并将其写入磁盘?
我找到了code.interact(),但由于我的代码中没有这个钩子,所以它对我来说似乎没什么用(查看现在运行的Python程序的方法).
我在Fedora 8上运行Python 2.5.有什么想法吗?
非常感谢.
沙欣
对于正在运行的程序,您无能为力。我唯一能想到的就是附加 gdb 调试器,停止进程并检查内存。或者,确保您的系统设置为保存核心转储,然后使用 终止进程kill --sigsegv <pid>。然后,您应该能够使用 gdb 打开核心转储并在闲暇时检查它。
有一些 gdb 宏可以让您检查 python 数据结构并从 gdb 中执行 python 代码,但是要使这些宏起作用,您需要在启用调试符号的情况下编译 python,我怀疑这是否是您的情况。首先创建核心转储,然后使用符号重新编译 python 将不起作用,因为所有地址都将与转储中的值发生更改。
以下是从 gdb 内省 python 的一些链接:
http://wiki.python.org/moin/DebuggingWithGdb
http://chrismiles.livejournal.com/20226.html
或者谷歌搜索“python gdb”
注意,使用 ulimit 命令设置 linux 创建 coredump。
ulimit -a将向您显示当前限制的设置。
ulimit -c unlimited将启用任何大小的核心转储。
| 归档时间: |
|
| 查看次数: |
1297 次 |
| 最近记录: |