与基本搜索相比,LDAP3 Reader游标的内存使用率较高

时间:2017-06-04 01:22:03

标签: python python-3.x python-ldap ldap3

我正在学习ldap3的Python(以及学习Python ......)

我正在尝试使用ldap3提取一些记录,迭代它们并对它们执行一些工作,然后将结果放入另一个数据库,简单的东西。

我遇到的问题是,当使用两种不同的获取数据的方法时,我的性能会有明显不同......

使用基本搜索http://ldap3.readthedocs.io/tutorial_searches.html

from ldap3 import Server, Connection, ObjectDef, AttrDef, Reader, ALL

server = Server('ldap.xxxx.xxx.xxx', use_ssl=True, get_info=ALL)
conn = Connection(server, 'cn=username,cn=applications,dc=xxx,dc=xxx', 'password',
                  auto_bind=True, check_names=True)

conn.search('cn=people, dc=xxx, dc=xxx','(HomeCity=nowhere)')

#end

这可以非常快速地以最少的内存使用量运行,对于大约43000个结果而言小于200MB

然而,使用阅读器光标http://ldap3.readthedocs.io/tutorial_abstraction_reader.html

from ldap3 import Server, Connection, ObjectDef, AttrDef, Reader, ALL

server = Server('ldap.xxxx.xxx.xxx', use_ssl=True, get_info=ALL)
conn = Connection(server, 'cn=username,cn=applications,dc=xxx,dc=xxx', 'password',
                  auto_bind=True, check_names=True)

obj_person = ObjectDef('xxxPerson',conn)

r = Reader(conn,obj_person,'cn=people, dc=xxx, dc=xxx','HomeCity:=nowhere',sub_tree=False)
r.search()

#end

需要更长时间并使用大约2 GB

两者都在检索完全相同的结果数。 使用

for entry in conn.entries
    print(sys.getsizeof(entry))

for entry in r
    print(sys.getsizeof(entry))

返回相同大小的对象

我不知道是什么导致一种方法比另一种方法使用更多的资源,或者如何在处理过程中释放资源

编辑1:好的我认为使用第一种方法,我实际上并没有提取任何属性,这就是为什么它没有真正使用任何内存..(更多测试很快)

0 个答案:

没有答案