Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 22, 2018 22:42:20

adray34
Зарегистрирован: 2017-04-07
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Многопоточность Python PyQt

Здравствуйте. Подскажите пожалуйста по такому вопросу. Как бороться с замираниями и тем что приложение не отвечает. Вот мой код:

 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_()

Офлайн

#2 Янв. 23, 2018 12:46:00

adray34
Зарегистрирован: 2017-04-07
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Многопоточность Python PyQt

Решил этот вопрос используя таймеры. Но всё же обновляются графики медленно когда запускаю 4 потока. Подскажите куда смотреть дальше ??

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version