Форум сайта python.su
PEHDOMпонятно, извини за тугодумость, значит в сторону мультипроцессора смотреть надо
Venus синдром жирафа? я ведь писал парй постов выше
Офлайн
VenusЭто вовсе необязательно, есть куча простых и не очень способов остановить поток, они уже не раз обсосаны со всех сторон на стековерфлов и подобных ресурсах.
значит в сторону мультипроцессора смотреть надо
[code python][/code]
Офлайн
PEHDOMи благодарю за проявленное терпение
Venus синдром жирафа? я ведь писал парй постов выше
Офлайн
PEHDOMа что произойдёт с запущеным дефом из внешнего модуля?он тоже остановится и если так то его останов процесса в деф стоп мэйна ставить(или правильно вызывать из дефа стоп мэйна)?
Офлайн
VenusЭ-э-э вот тут я совсем потерялся, чет я совсем ничего не понял.
а что произойдёт с запущеным дефом из внешнего модуля?он тоже остановится и если так то его останов процесса в деф стоп мэйна ставить(или правильно вызывать из дефа стоп мэйна)?
[code python][/code]
Офлайн
PEHDOMвот что откопал на просторах, норм?
# Импортируем модуль threading для работы с потоками import threading # Отдельная функция-заготовка для вынесения # последующих функций в отдельный поток def thread(my_func): def wrapper(*args, **kwargs): my_thread = threading.Thread(target=my_func, args=args, kwargs=kwargs) my_thread.start() return wrapper # Теперь чтобы запустить любую функцию в отдельный поток # достаточно над ее именем написать @thread @thread def go(nomer): # В этой функции будем печатать числа от 1 до 199 for x in range(1, 200): print('Поток номер '+str(nomer)+' число '+str(x)+'\n') # Запускаем функцию три раза и получаем три потока go(1) go(2) go(3)
Отредактировано Venus (Июль 18, 2018 22:09:43)
Офлайн
PEHDOMпопробовал что вы показали, тестить в хвост и гриву послезавтра буду, гуи не подвисаетт!надеюсь для моего кода сойдёт
Отредактировано Venus (Июль 18, 2018 22:12:06)
Офлайн
VenusИМХО ты пытаешься бежат впереди паровоза, то что ты “откопал” называется декоратор.
вот что откопал на просторах, норм?
[code python][/code]
Офлайн
PEHDOMтерь самое интересное )) а как остановить скрипт
from PyQt5 import QtWidgets from threading import Thread from samplestrorint import * import sys import strorint1 def log_uncaught_exceptions(ex_cls, ex, tb): text = '{}: {}:\n'.format(ex_cls.__name__, ex) import traceback text += ''.join(traceback.format_tb(tb)) print(text) QMessageBox.critical(None, 'Error', text) quit() sys.excepthook = log_uncaught_exceptions class MainWindow(QtWidgets.QMainWindow): def __init__(self, parent=None): QtWidgets.QWidget.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.statusBar().showMessage('Stop') self.ui.pushButton.clicked.connect(self.Start) self.ui.pushButton_2.clicked.connect(self.Stop) self.ui.pushButton.clicked.connect(lambda: self.statusBar().showMessage('запущен')) self.ui.pushButton_2.clicked.connect(lambda: self.statusBar().showMessage('остановлен')) def Start(self): strorint1.n = 1 [b]<-- добавил[/b] r = self.ui.textEdit.toPlainText() strorint1.r = int(r) self.sec_thread = Thread(target = strorint1.strorint) self.sec_thread.start() def Stop(self): strorint1.n = 0 [b]<-- добавил[/b] #n = self.ui.textEdit.toPlainText() #strorint1.n = int(r) strorint1.stop() if __name__=="__main__": app = QtWidgets.QApplication(sys.argv) myapp = MainWindow() myapp.show() sys.exit(app.exec_())
# -*- coding: utf-8 -*- import time import sys import os r = ('') n = () def strorint(): if n == 1: time.sleep(r) print(r, type(r)) strorint() else: stop() def stop(): print("Перезапуск",r,type(r)) time.sleep(r)
Отредактировано Venus (Июль 21, 2018 13:03:42)
Офлайн
Venusпредполагаю это потому что ты нажал стоп во время цикла, в это время поток спал “time.sleep(r)”, поэтому выполнилось strorint1.stop() из ГУИ, потом поток проснулся напечатал “r, type(r)”, и вызвал рекурсивно себяже, там он увидил что n ==0, и вызвал stop() еще раз.
стал останавливаться но через цикл, ааа можето то что во время цикла нажал стоп он и вывел?
# -*- coding: utf-8 -*- import time r = '' flag = True def strorint(): while flag: print(r, type(r)) time.sleep(r) def start(): global flag flag = True strorint() def stop(): global flag flag = False print("Перезапуск",r,type(r)) time.sleep(r)
.... def Start(self): r = self.ui.textEdit.toPlainText() strorint1.r = int(r) sec_thread = Thread(target = strorint1.start) sec_thread.start() def Stop(self): strorint1.stop() ...
[code python][/code]
Офлайн