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