Здравствуйте. Подскажите пожалуйста по такому вопросу. Как бороться с замираниями и тем что приложение не отвечает. Вот мой код:
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_()