Rel*_*roC 5 python multiprocessing
我创建一个按钮,并在单击按钮时尝试运行多处理,
但是UI被阻止了.我希望进程能够在backgorund中运行.
我该如何解决?
from PySide2 import QtCore,QtGui,QtWidgets
import sys
import multiprocessing
from threading import Timer
class TTT(multiprocessing.Process):
def __init__(self):
super(TTT, self).__init__()
self.daemon = True
def run(self):
while True:
t = Timer(5, self.doSomething)
t.start()
t.join()
def doSomething(self):
try:
print('123')
except Exception as e:
print(e)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
btn = QtWidgets.QPushButton('run process')
btn.clicked.connect(self.create_process)
self.setCentralWidget(btn)
def create_process(self):
QtWidgets.QMessageBox.information(self,'hhh','hhh')
t = TTT()
t.start()
t.join()
if __name__=="__main__":
app=QtWidgets.QApplication(sys.argv)
ex = MainWindow()
ex.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
Bendeg\xc3\xbaz Szatm\xc3\xa1ri 已经回答了主要问题。
\n\n我只是想让您知道,在大多数使用情况下,使用 Process 并不是最好的主意。\n不同的进程不会与您的程序共享内存。你不能像控制不同的线程那样容易地控制它们。
\n\n这是一个简单的示例,如何启动结束停止不同的线程。
\n\nfrom PyQt5 import QtWidgets\nfrom PyQt5.QtCore import *\nimport sys\nimport time\n\n\nclass TTT(QThread):\n def __init__(self):\n super(TTT, self).__init__()\n self.quit_flag = False\n\n def run(self):\n while True:\n if not self.quit_flag:\n self.doSomething()\n time.sleep(1)\n else:\n break\n\n self.quit()\n self.wait()\n\n def doSomething(self):\n print(\'123\')\n\n\nclass MainWindow(QtWidgets.QMainWindow):\n def __init__(self, parent=None):\n super(MainWindow, self).__init__(parent)\n self.btn = QtWidgets.QPushButton(\'run process\')\n self.btn.clicked.connect(self.create_process)\n self.setCentralWidget(self.btn)\n\n def create_process(self):\n if self.btn.text() == "run process":\n print("Started")\n self.btn.setText("stop process")\n self.t = TTT()\n self.t.start()\n else:\n self.t.quit_flag = True\n print("Stop sent")\n self.t.wait()\n print("Stopped")\n self.btn.setText("run process")\n\n\nif __name__=="__main__":\n app=QtWidgets.QApplication(sys.argv)\n ex = MainWindow()\n ex.show()\n sys.exit(app.exec_())\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
3079 次 |
最近记录: |