Уведомления

Группа в Telegram: @pythonsu

#1 Март 5, 2018 00:13:06

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

multiprocessing Python

Здравствуйте дорогие форумчане.
У меня следующая проблема мне нужно по нажатию кнопки стартовать и останавливать процесс в котором цикл while.
В связи с этим вопрос как мне передать значение флага в процесс вот мой код но он не работает.(

 import multiprocessing
from PyQt4 import QtCore, QtGui, uic
import sys
class Work_Proc(multiprocessing.Process):
    def __init__(self):
        multiprocessing.Process.__init__(self)
        self.flag = False
    def run(self):
        while self.flag:
            print(2)
class Widget(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        uic.loadUi('untitled.ui', self)
        self.connect(self.pushButton, QtCore.SIGNAL('clicked()'), self.start)
    def start(self):
        work.flag = True
if __name__ == "__main__":
    app = QtGui.QApplication([])
    work = Work_Proc()
    work.start()
    window=Widget()
    window.show()
    if __name__ == '__main__':
        if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
            QtGui.QApplication.instance().exec_()

Офлайн

#2 Март 5, 2018 00:29:28

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

multiprocessing Python


в мультипроцессингое для обмена используются Pipe или Queue



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#3 Март 5, 2018 00:54:32

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

multiprocessing Python

А подскажите как мне это приспособить к моему коду ?? Я знаю про pipe еще я использовал в другом приложении sharedmemory. Но как мне использовать это в моем коде я не могу понять. И мне очень важно быстродействие. То есть в отдельно процессе у меня будет идти опрос устройства которое непрерывно шлет данные и в момент нажатия мне нужно закончить этот опрос и перейти к другой функции которая будет выполнятся в этом же процессе.

Офлайн

#4 Март 6, 2018 17:35:08

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

multiprocessing Python

ХЗ наколько это правильно, но както так работает:

 #
from multiprocessing import Process, Pipe
from PyQt4 import QtGui
class Work_Proc(Process):
    def __init__(self, pipe):
        Process.__init__(self)
        self.pipe = pipe
    def run(self):
        file = open('output.log', 'w')
        file.write('porcess started\n')
        while True:
            # бесконечный цикл
            if self.pipe.poll():
                # Проверяем есть ли чтото в трубе, если есть:
                if self.pipe.recv() == 'stop':
                    # Читаем что там, если пршло слово "stop" Прерываем цикл
                    file.write('stop working.\n')
                    break
            # Тут какаято работа внутри бесконечного цикла
            file.write('I`m working....\n')
        # Тут работа после прерывания цикла, например вызов другой процедуры
        file.write('Other work runing....\n')
        file.close()
        return
class Widget(QtGui.QWidget):
    def __init__(self, pipe):
        QtGui.QWidget.__init__(self)
        self.pipe = pipe
        layout = QtGui.QVBoxLayout(self)
        self.pushButton= QtGui.QPushButton('stop', self)
        self.pushButton.clicked.connect(self.stop)
        layout.addWidget(self.pushButton)
    def stop(self):
        self.pipe.send('stop') # Послаем в "трубу" слово стоп
if __name__ == "__main__":
    app = QtGui.QApplication([])
    end1_pipe, end2_pipe = Pipe() # Создаем "трубу"
    window=Widget(end2_pipe) # Один конец "трубы" перелаем виджету
    window.show()
    work = Work_Proc(end1_pipe) # второй конец "трубы" передаем процессу
    work.start() # Запускаем процесс
    app.exec_()



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Март 6, 2018 17:35:24)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version