2

我正在学习ldap3Python(以及学习 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:好的,我认为使用第一种方法,我实际上并没有引入任何属性,这就是为什么它没有真正使用任何内存..(更多测试很快)

4

0 回答 0