파이썬 모듈 timeit
을 사용하여 QGIS 플러그인의 일부 기능을 사용하고 싶습니다.qgis 플러그인의 Timeit 모듈
여기 마지막 함수의 끝에서 호출하는 함수 내에서 함수가 작동하는 시간을 호출했습니다. 플러그인이 평상시보다 더 오래 실행하는 것 같아서 잘못된 장소에서 타이머를 호출하는지 궁금합니다. 이것을 설정하는 더 좋은 방법이 있습니까?
class myPluginName:
def firstFunction(self):
...
self.secondFunction()
def secondFunction(self):
...
self.timeThings()
def run(self):
self.firstFunction()
def timeThings(self):
QMessageBox.information(None, 'First Function', 'Time : %s' % timeit.timeit(self.firstFunction,number=1)
QMessageBox.information(None, 'Second Function', 'Time : %s' % timeit.timeit(self.secondFunction,number=1)
업데이트 : 몇 가지 조언을 따른 후 다음과 같은 방식으로 래퍼를 구현하려고했습니다. 나는, 그러나 TypeError: firstFunction() takes exactly 1 argument (2 given) on ret = func(**args, **kwargs)
def time_func(func):
try:
name = func.__name__
except:
name = func.f__name
def tf_wrapper(*args, **kwargs):
t = time.time()
ret = func(*args, **kwargs)
QMessageLog.logMessage("{}: {}".format(name, time.time() - t))
return ret
return tf_wrapper
class myPlugin:
def initGui(self):
QObject.connect(self.dlg.ui.comboBox,SIGNAL("currentIndexChanged(int)"), self.firstFunction)
@time_func
def firstFunc(self):
registry = QgsMapLayerRegistry.instance()
firstID = str(self.dlg.ui.firstCombo.itemData(self.dlg.ui.firstCombo.currentIndex()))
secondID = str(self.dlg.ui.secondCombo.itemData(self.dlg.ui.secondCombo.currentIndex()))
self.firstLayer = registry.mapLayer(firstID)
self.secondLayer = registry.mapLayer(secondID)
@time_func
def secondFunc(self):
...
self.thirdFunc()
def thirdFunct(self):
...
def run(self):
self.dlg.ui.firstCombo.clear()
self.dlg.ui.secondCombo.clear()
for layer in self.iface.legendInterface().layers():
if layer.type() == QgsMapLayer.VectorLayer:
self.dlg.ui.firstCombo.addItem(layer.name(), layer.id())
self.dlg.ui.secondCombo.addItem(layer.name(), layer.id())
result = self.dlg.exec_()
if result == 1:
self.secondFunction()
@matsjoyce 나는 몇 가지 다른 방법으로 여러 기능을 호출합니다. 첫 번째는 콤보 상자 인덱스의 변경으로 호출됩니다. 두 번째 대화 상자에서 수락 단추가 있습니다. 함수 내에서 호출되는 함수도 있습니다. 편집을 참조하십시오. – user25976
@matsjoyce 방금 더 많은 코드를 추가했습니다. – user25976
내 추가 참조 – matsjoyce