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