Форум сайта python.su
Здравствуйте. Подскажите пожалуйста по такому вопросу. Как бороться с замираниями и тем что приложение не отвечает. Вот мой код:
import numpy as np import function import multiprocessing import time arr400 = multiprocessing.Array('d', 10*8192) arr400 = np.frombuffer(arr400.get_obj()) arr800 = multiprocessing.Array('d', 8192*14) arr800 = np.frombuffer(arr800.get_obj()) arr1200 = multiprocessing.Array('d', 4096*36) arr1200 = np.frombuffer(arr1200.get_obj()) arr2400 = multiprocessing.Array('d', 8192*28) arr2400 = np.frombuffer(arr2400.get_obj()) band = 100e6 / 4 def reciev400(): start_freq = 400e6 stop_freq = 650e6 num_samps = 8192 print('PROC400_START') function.prereciev('addr=192.168.10.1', band) while True: arr400[:] = function.reciv_uhd_source(start_freq, band, num_samps,10) def reciev800(): start_freq = 650e6 stop_freq = 1000e6 num_samps = 8192 print ("PROC800_START") function.prereciev('addr=192.168.10.2', band) while True: arr800[:] = function.reciv_uhd_source(start_freq, band, num_samps,14) def reciev1200(): start_freq = 1000e6 stop_freq = 1900e6 num_samps = 4096 print ('PROC1200_START') function.prereciev('addr=192.168.10.3', band) while True: arr1200[:] = function.reciv_uhd_source(start_freq, band,num_samps,36) def reciev2400(): start_freq = 2100e6 stop_freq = 2700e6 num_samps = 8192 print ('PROZ2400_Start') function.prereciev('addr=192.168.10.4', band) while True: arr2400[:] = function.reciv_uhd_source(start_freq, band, num_samps,28) print("OK") for i in [reciev400, reciev800, reciev1200, reciev2400]: p = multiprocessing.Process(target=i) p.daemon = True p.start() from PyQt4 import QtGui, QtCore, uic class My_Windows(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) uic.loadUi("desktop.ui", self) self.connect(self.reciev, QtCore.SIGNAL("clicked()"), self.on_start) data400 = self.graphicsView400 data800 = self.graphicsView800 data1200 = self.graphicsView1000 data2400 = self.graphicsView2400 self.plota400 = data400.plot() self.plota800 = data800.plot() self.plota1200 = data1200.plot() self.plota2400 = data2400.plot() self.tread = Tread() self.tread1 = Tread1() self.tread2 = Tread2() self.tread3 = Tread3() self.tread.mysignal_400.connect(self.plot_data) self.tread1.mysignal_800.connect(self.plot_data1) self.tread2.mysignal_1200.connect(self.plot_data2) self.tread3.mysignal_2400.connect(self.plot_data3) def plot_data(self, data): self.plota400.setData(data) def plot_data1(self, data): self.plota800.setData(data) def plot_data2(self, data): self.plota1200.setData(data) def plot_data3(self, data): self.plota2400.setData(data) def on_start(self): self.tread.start() self.tread1.start() self.tread2.start() self.tread3.start() class Tread(QtCore.QThread): mysignal_400 = QtCore.pyqtSignal(np.ndarray) def __init__(self): QtCore.QThread.__init__(self) # input_400.close() def run(self): while True: QtCore.QThread.msleep(100) self.mysignal_400.emit(arr400) class Tread1(QtCore.QThread): mysignal_800 = QtCore.pyqtSignal(np.ndarray) def __init__(self): QtCore.QThread.__init__(self) # input_800.close() def run(self): while True: app.processEvents() QtCore.QThread.msleep(100) self.mysignal_800.emit(arr800) class Tread2(QtCore.QThread): mysignal_1200 = QtCore.pyqtSignal(np.ndarray) def __init__(self): QtCore.QThread.__init__(self) # input_1200.close() def run(self): while True: app.processEvents() QtCore.QThread.msleep(100) self.mysignal_1200.emit(arr1200) class Tread3(QtCore.QThread): mysignal_2400 = QtCore.pyqtSignal(np.ndarray) def __init__(self): QtCore.QThread.__init__(self) # input_2400.close() def run(self): while True: app.processEvents() QtCore.QThread.msleep(100) self.mysignal_2400.emit(arr2400) if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) window = My_Windows() window.show() if __name__ == '__main__': if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): QtGui.QApplication.instance().exec_()
Офлайн
Решил этот вопрос используя таймеры. Но всё же обновляются графики медленно когда запускаю 4 потока. Подскажите куда смотреть дальше ??
Офлайн