0

我开发了一个解析大量数据的应用程序,但是如果我在解析完所有数据后提交数据,它会消耗太多内存。但是,我不能每次都提交它,因为它会花费太多的硬盘 I/O。

因此,我的问题是如何知道会话中有多少未提交的项目?

4

3 回答 3

2

您可以使用session.new。它是刚刚创建的和未提交的对象的集合。session.dirty也很有用。引用文档:

# pending objects recently added to the Session
session.new

# persistent objects which currently have changes detected
# (this collection is now created on the fly each time the property is called)
session.dirty

# persistent objects that have been marked as deleted via session.delete(obj)
session.deleted

# dictionary of all persistent objects, keyed on their
# identity key
session.identity_map
于 2012-12-17T08:35:49.957 回答
2

您可以使用session.new,session.dirtysession.deleted结合通过事件系统跟踪刷新(导致 .new、.dirty 和 .deleted 被重置)来跟踪未提交的更改。有关详细信息,请参阅此处的对话:https ://groups.google.com/forum/#!topic/sqlalchemy/eGxpQBChXQw

于 2014-10-14T21:21:28.413 回答
0

这是一个典型的缓冲案例。如果磁盘 I/O 过多(或者您不喜欢它导致长时间暂停等),请尝试一个相当大的块并减少它,或者如果您的配置文件在 I/O 调用中显示过多的 CPU 时间,则增加它。

要实现,请使用一个数组,每次“写入”您将一个项目附加到数组中。有一个单独的“刷新”函数来编写整个事情。您检查的每个追加,如果它已达到最大大小,请将它们全部写入并清除数组。最后,调用flush函数写入部分填充的数组。

于 2012-12-17T08:46:03.150 回答