字典列表到字典对象列表的字符串表示

2024-09-19 23:42:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我在remctl上使用子流程检查输出返回如下字符串:

[{'key':'value', 'key':'value', 'Key':[{'key':'value'}]}, 
 {'key':'value', 'key':'value', 'Key':[{'key':'value'}]}]

如何将其转换为字典的对象列表,以便Python可以像往常一样在其上循环?你知道吗

我试过ast.literal_eval(),但得到了malformed string的错误。我还尝试了json.loads()并收到了Expecting property name: line 1 column 3 (char 2)错误。你知道吗

有什么办法解决这个问题吗?你知道吗


Tags: 对象key字符串列表string字典value错误
2条回答

在大约5分钟的时间里,你的应用程序除了运行主要的GC之外几乎什么都不做。每个GC大约需要3-4秒(此时JVM没有响应),紧接着是另一个GC。此外,GC消耗100%的CPU(单核?)

重要的是要注意,每个主要垃圾收集中心并没有真正收集任何垃圾,无论是在年轻人中:

PSYoungGen: 132928K->132922K(196736K)

在老一代:

PSOldGen: 1310719K->1310719K(1310720K)

因为JVM找不到任何可用内存,它一次又一次地运行GC,然后

然而,你的应用程序并没有崩溃。然而,在这几分钟后,它突然恢复了(为了清晰起见,分成几行):

26437.304: [Full GC 
    [PSYoungGen: 132928K->0K(196736K)] 
    [PSOldGen: 1310719K->53875K(1310720K)] 1443647K->53875K(1507456K) 
    [PSPermGen: 55172K->55172K(262144K)], 0.6250820 secs] 
    [Times: user=0.63 sys=0.00, real=0.62 secs] 

不仅整个年轻一代被释放,老一代的数量也从1280MB下降到52MB。请仔细观察这个图表。蓝线显示了你的堆使用量,几分钟后,堆的使用量突然飙升并下降。绿线还显示了平均GC时间——从可容忍的毫秒到灾难性的秒。最后,黑色竖条代表主要GC。它们不应该比每隔一分钟(小时?)出现得更频繁,不是每隔一秒钟

GCViewer

这告诉我,在这短短的一段时间里,你在内存中保存了大量的数据。可能是一大堆东西。不知何故,JVM并没有崩溃,而是设法继续处理。当你的工作完成后,整个系列只是GCed

如果没有看到代码(我看到AlarmService挂在日志中……),很难判断,但在使用内存转储和评测等工具之前,请检查代码,尤其是从DB加载或从外部获取的无限集合(我看到Twitter了吗?)

memmory中的对象大致分为两堆(从GC的角度来看):年轻一代和老一代

大多数情况下,GC会在年轻的gen对象上运行短期迭代,这些迭代通常与应用程序流并行运行(应用程序不会停止)

每隔一段时间,年轻一代堆就会被填满,GC会执行所谓的“停止世界”清理,也就是说,应用程序会完全停止,GC会清理两个堆中所有不必要的对象。显然,这个迭代比通常的短迭代需要更多的时间

你需要检查几件事:

  1. 尝试分析应用程序,确保没有导致堆快速增长的memmory泄漏,从而经常强制执行完整的GC
  2. GC有几种算法会导致它的行为不同(并行运行、串行运行等),您可能希望对其进行研究,看看哪种算法更适合您的需要

你可以在here中查找指针,也可以使用谷歌

相关问题 更多 >