PEHDOMпонятно, извини за тугодумость, значит в сторону мультипроцессора смотреть надо
Venus синдром жирафа? я ведь писал парй постов выше
PEHDOMпонятно, извини за тугодумость, значит в сторону мультипроцессора смотреть надо
Venus синдром жирафа? я ведь писал парй постов выше
VenusЭто вовсе необязательно, есть куча простых и не очень способов остановить поток, они уже не раз обсосаны со всех сторон на стековерфлов и подобных ресурсах.
значит в сторону мультипроцессора смотреть надо
PEHDOMи благодарю за проявленное терпение
Venus синдром жирафа? я ведь писал парй постов выше
PEHDOMа что произойдёт с запущеным дефом из внешнего модуля?он тоже остановится и если так то его останов процесса в деф стоп мэйна ставить(или правильно вызывать из дефа стоп мэйна)?
VenusЭ-э-э вот тут я совсем потерялся, чет я совсем ничего не понял.
а что произойдёт с запущеным дефом из внешнего модуля?он тоже остановится и если так то его останов процесса в деф стоп мэйна ставить(или правильно вызывать из дефа стоп мэйна)?
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)
PEHDOMпопробовал что вы показали, тестить в хвост и гриву послезавтра буду, гуи не подвисаетт!надеюсь для моего кода сойдёт
VenusИМХО ты пытаешься бежат впереди паровоза, то что ты “откопал” называется декоратор.
вот что откопал на просторах, норм?
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предполагаю это потому что ты нажал стоп во время цикла, в это время поток спал “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() ...