Найти - Пользователи
Полная версия: python и active directory помогите ускорить выборку
Начало » Python для новичков » python и active directory помогите ускорить выборку
1
boch333
Доброе время суток !

Помогите ускорить выборку из active directory? Своих усилий хватило на следующий код:
модуль main_AD_list.py
from PyQt4 import QtGui, QtCore
from ADD_AD_form import Ui_ADForm
import win32com.client
class myADWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        super(myADWindow,self).__init__(parent)
        self.ui = Ui_ADForm()
        self.ui.setupUi(self)
        self.connect(self.ui.pushButton,QtCore.SIGNAL("clicked()"),QtGui.qApp.quit)
        self.connect(self.ui.pushButton_2,QtCore.SIGNAL("clicked()"),self.AD_list_Filter)
        
    def AD_list_Filter(self):
        GetObj = win32com.client.GetObject
        ou="LDAP://DC=cis/DC=compan/OU=region compani/OU=zavod"
        obj_ou = GetObj(ou)
        for o in obj_ou:
            item = QtGui.QTreeWidgetItem(self.ui.treeWidget)
            item.setText(0,o.Name)
            ou_n = ou+'/' + o.Name
            obj_ou_n = GetObj(ou_n)
            for o in obj_ou_n:
                item_2 = QtGui.QTreeWidgetItem(item)
                item_2.setText(0, o.Name)
                item.addChild(item_2)
                ou_u = ou_n +'/'+ o.Name
                obj_ou_u = GetObj(ou_u)
               # obj_u.Filter = ["User"]
                for o in obj_ou_u:
                    item_3 = QtGui.QTreeWidgetItem(item_2)
                    item_3.setText(0, o.Name)
                    item.addChild(item_3)
                    user = ou_u +'/'+ o.Name
                    obj_user = GetObj(user)
                    for o in obj_user:
                        item_4 = QtGui.QTreeWidgetItem(item_3)
                        item_4.setText(0, o.Name)
                        item.addChild(item_4)
                        user_g = user +'/'+ o.Name
                        obj_user_g = GetObj(user_g)
                        for o in obj_user_g:
                            item_5 = QtGui.QTreeWidgetItem(item_4)
                            item_5.setText(0, o.Name)
                            item.addChild(item_5)
для вывода результата использую небольшой графический интерфейс построеный на pyQt 4 непосредственно компонент QTreeWidget:
модуль формы ADD_AD_form

from PyQt4 import QtCore, QtGui
try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s
class Ui_ADForm(object):
    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.resize(291, 291)
        self.treeWidget = QtGui.QTreeWidget(Form)
        self.treeWidget.setGeometry(QtCore.QRect(10, 10, 271, 191))
        self.treeWidget.setObjectName(_fromUtf8("treeWidget"))
        self.treeWidget.headerItem().setText(0, _fromUtf8("1"))
        self.pushButton = QtGui.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(20, 240, 111, 41))
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.pushButton_2 = QtGui.QPushButton(Form)
        self.pushButton_2.setGeometry(QtCore.QRect(160, 240, 111, 41))
        self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
        self.lineEdit = QtGui.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(10, 210, 271, 20))
        self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)
    def retranslateUi(self, Form):
        Form.setWindowTitle(QtGui.QApplication.translate("Form", "Form", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton.setText(QtGui.QApplication.translate("Form", "CLOSE", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton_2.setText(QtGui.QApplication.translate("Form", "ADD", None, QtGui.QApplication.UnicodeUTF8))

все это соединяется модулем: ad_list

from PyQt4 import QtGui, QtCore
from main_AD_list import myADWindow
if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    window = myADWindow()
    window.show()
    sys.exit(app.exec_())

и все бы ничего но данные на форме показываются через пол часа после нажатия кнопки выборки.
ПОМОГИТЕ УСКОРИТЬ РАБОТУ!
Была идея как нибудь за кешировать результаты первоначальной выборки а потом тоько проверять изменения или загружать в виджет кеш но с реализацие что то не получается предложения в этом направлении тоже приветствуются.
reclosedev
Не пробовали специализированные модули?
http://www.python-ldap.org/
http://timgolden.me.uk/python/ad_cookbook.html
http://pypi.python.org/pypi/pyad

ActiveX вызовы всегда очень дорогие, может в них оптимальнее сделано? Вот например:
http://www.python-ldap.org/doc/html/ldap-async.html

Сам с LDAP не сталкивался.
odnochlen
А проверить без гуя, сколько грузятся данные из ldap?
boch333
Без гуя тоже не шустро мож мин. на 2-5 быстрее, и данные выводит постепенно
boch333
Я вот думаю на счет кеша в виде текстового файла или в памяти, подскажите можноли так сделать.
reclosedev спосибо за сылки, попробую с помощью спец модулей.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB