xeonthread

nv_temp

Nov 26th, 2019
291
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.47 KB | None | 0 0
  1. import sys, subprocess, time, threading, win32process, ctypes, os
  2. from PyQt5 import QtCore, QtGui, QtWidgets
  3. from PyQt5.QtWidgets import QWidget
  4.  
  5.  
  6. class Ui_Form(QWidget):
  7.     """Создаём форму QT"""
  8.  
  9.     def __init__(self, parent=None):
  10.         QWidget.__init__(self, parent)
  11.         self.setObjectName("Form")
  12.         self.setWindowModality(QtCore.Qt.NonModal)
  13.         self.setEnabled(True)
  14.         self.resize(275, 54)
  15.         sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
  16.         sizePolicy.setHorizontalStretch(0)
  17.         sizePolicy.setVerticalStretch(0)
  18.         sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth())
  19.         self.setSizePolicy(sizePolicy)
  20.         self.setMinimumSize(QtCore.QSize(275, 54))
  21.         self.setMaximumSize(QtCore.QSize(275, 54))
  22.         self.verticalLayout_2 = QtWidgets.QVBoxLayout(self)
  23.         self.verticalLayout_2.setObjectName("verticalLayout_2")
  24.         self.label = QtWidgets.QLabel(self)
  25.         font = QtGui.QFont()
  26.         font.setPointSize(11)
  27.         font.setBold(False)
  28.         font.setWeight(50)
  29.         self.label.setFont(font)
  30.         self.label.setAlignment(QtCore.Qt.AlignCenter)
  31.         self.label.setObjectName("label")
  32.         self.verticalLayout_2.addWidget(self.label)
  33.         QtCore.QMetaObject.connectSlotsByName(self)
  34.         self.setWindowTitle("GPU Temp")
  35.         self.label.setText("Температура ГПУ: --")
  36.  
  37.     def closeEvent(self, event):
  38.         """Событие при закрытии окна QT"""
  39.         global closure
  40.         closure = 1
  41.  
  42.  
  43. """Тело программы:"""
  44. app = QtWidgets.QApplication(sys.argv)
  45. ui = Ui_Form()
  46. ui.show()
  47. closure = 0
  48.  
  49.  
  50. def thread(my_func):
  51.     """Декоратор, запускающий функцию в отдельном потоке:"""
  52.  
  53.     def wrapper(*args, **kwargs):
  54.         my_thread = threading.Thread(target=my_func, args=args, kwargs=kwargs)
  55.         my_thread.start()
  56.  
  57.     return wrapper
  58.  
  59.  
  60. @thread
  61. def processing():
  62.     """Запрос показателей ГПУ:"""
  63.     global closure
  64.  
  65.     hwnd = ctypes.windll.kernel32.GetConsoleWindow()  # Модуль, закрывающий окно cmd
  66.     if hwnd != 0:
  67.         ctypes.windll.user32.ShowWindow(hwnd, 0)
  68.         ctypes.windll.kernel32.CloseHandle(hwnd)
  69.         pid = (win32process.GetWindowThreadProcessId(hwnd))
  70.         arg = ['/PID {0}'.format(pid[1]), '/F']
  71.         killer = r'C:\Windows\System32\taskkill.exe'
  72.         os.spawnv(os.P_DETACH, killer, arg)
  73.  
  74.     nvsmi_path = r'c:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe'  # расположение программы для мониторинга
  75.     arg = ['-i 0 --loop-ms=3000 --format=csv,noheader --query-gpu=temperature.gpu']  # аргументы для запуска программы
  76.     tmprtr = subprocess.Popen([nvsmi_path, arg], stdout=subprocess.PIPE, text=True)  # запуск программы в новом процессе
  77.     for i in tmprtr.stdout:  # мониториннг stdout запущенного процесса мониторинга
  78.         gpu_temp = int(i[0:2])
  79.         ui.label.setText("Температура ГПУ: {0}".format(gpu_temp))
  80.         time.sleep(3)
  81.         if closure == 1:
  82.             tmprtr.kill()  # Завершение запущенного процесса мониторинга при закрытии окна Qt
  83.             break
  84.  
  85.  
  86. processing()
  87. sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment