Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有内置多处理功能的PySide2_Python_Python 3.x_Python Multiprocessing_Pyside2 - Fatal编程技术网

Python 具有内置多处理功能的PySide2

Python 具有内置多处理功能的PySide2,python,python-3.x,python-multiprocessing,pyside2,Python,Python 3.x,Python Multiprocessing,Pyside2,我试图修改用PyQt5编写的原始代码,以解决许可证问题。在最初的代码(PyQt5)中,我在QThread中使用它来提高CPU的使用率,它工作得非常好。但是,在修改为PySide2之后,代码会生成一系列错误并破坏GUI。以下是导致问题的一个最小化示例 当我使用PyQt5而不是PySide2时,下面的代码运行良好 导入系统 将多处理作为mp导入 从PyQt5.QtCore导入QThread 从PyQt5.QtWidgets导入QApplication、QMainWindow、QPushButton

我试图修改用PyQt5编写的原始代码,以解决许可证问题。在最初的代码(PyQt5)中,我在QThread中使用它来提高CPU的使用率,它工作得非常好。但是,在修改为PySide2之后,代码会生成一系列错误并破坏GUI。以下是导致问题的一个最小化示例

当我使用PyQt5而不是PySide2时,下面的代码运行良好

导入系统 将多处理作为mp导入 从PyQt5.QtCore导入QThread 从PyQt5.QtWidgets导入QApplication、QMainWindow、QPushButton 类任务(QThread): def运行(自): 打印('任务已启动') 使用mp.Pool()作为池: res=pool.map(mp_任务,范围(10000)) 打印('任务完成',分辨率) def mp_任务(x): #一些繁重的任务 ret=0 对于范围内的i(x+50000): ret+=i 回程网 类Gui(QMainWindow): 定义初始化(自): super()。\uuuu init\uuuuu() button=QPushButton('单击我') 按钮。单击。连接(self.do_任务) self.setCentralWidget(按钮) def do_任务(自我): self.thread=Task() self.thread.start() def main(): app=QApplication(sys.argv) window=Gui() window.show() sys.exit(app.exec_()) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': main() 但是,例如,如果我将导入包从
PyQt5
更改为
PySide2

从PySide2.QtCore导入QThread
从PySide2.QtWidgets导入QApplication、QMainWindow、QPushButton
单击按钮后,GUI将被销毁,程序将生成以下错误消息(某些重复消息已被忽略):

可能是PyQt5和PySide2在QThread中存在一些差异,导致了这个致命错误。如果我不想将
QApplication
Gui
移动到全局范围,我如何解决这个问题


测试环境:Ubuntu 18.04 64位、Python3.6、PyQt5 5.11.2、PySide2 5.11.1有趣的是,如果我将
main()
函数的内容放到全局范围,问题就解决了!例如:

如果uuuu name_uuuu=='\uuuuuuu main\uuuuuu':
app=QApplication(sys.argv)
window=Gui()
window.show()
sys.exit(app.exec_())

此外,Qt6将很快发布,并进行多项Python集成改进。这个问题可以用新版本的PySide解决。

PySide2和PyQT在内部是不同的。既然您找到了问题的解决方案,您可以将其添加为答案。我相信这会帮助很多其他用户。@NicholasTJ,谢谢你的建议。
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QApplication(0x1cb19c0), parent's thread is QThread(0x1948cc0), current thread is Task(0x7fc1d0005390)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QApplication(0x1cb19c0), parent's thread is QThread(0x1948cc0), current thread is Task(0x7fc1d0005390)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QApplication(0x1cb19c0), parent's thread is QThread(0x1948cc0), current thread is Task(0x7fc1d0005390)
qt.qpa.xcb: QXcbConnection: XCB error: 128 (Unknown), sequence: 548, resource id: 88080397, major code: 130 (Unknown), minor code: 2
qt.qpa.xcb: QXcbConnection: XCB error: 128 (Unknown), sequence: 552, resource id: 88080397, major code: 130 (Unknown), minor code: 2
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QApplication(0x1cb19c0), parent's thread is QThread(0x1948cc0), current thread is Task(0x7fc1d0005390)