Chinaunix

标题: multiprocessing和pyside问题 [打印本页]

作者: anonymous0502    时间: 2012-04-14 13:26
标题: multiprocessing和pyside问题
本帖最后由 anonymous0502 于 2012-04-14 13:35 编辑

请教各位高手:
如何在multiprocessing子进程和pyside图形界面应用程序间共享数据啊?
试了用Manager().dict()和Value()都不行,程序直接崩溃了。
非常头大

直接传变量(比如int类型的变量)的方式也不行
作者: pastebt    时间: 2012-05-10 07:50
回复 1# anonymous0502

代码有恶不贴,只好继续头大
试过普通的multiprocessing之间传数据么?先把问题简化一下
   
作者: 106033177    时间: 2012-05-10 08:09
本帖最后由 106033177 于 2012-05-10 08:10 编辑
anonymous0502 发表于 2012-04-14 13:26

直接传变量(比如int类型的变量)的方式也不行

你知不知道什么叫进程间通讯?
http://docs.python.org/library/m ... s-between-processes
作者: anonymous0502    时间: 2012-05-10 09:11
本帖最后由 anonymous0502 于 2012-05-10 09:38 编辑

我的demo在这里:
http://www.python-forum.org/pyth ... php?f=3&t=33795

进程间通信的方式已经试了几种了,那些方式用在multiprocessing之间是可以的,但是用在pyside gui application和multiprocessing之间没有效果,不知道问题在哪里。
楼上两位有空可以帮看看demo问题,多谢。

不过我的实际应用我通过变通的方式解决了
作者: 106033177    时间: 2012-05-10 10:40
回复 4# anonymous0502
去掉startlog函数,子进程创建直接写在main()里面,效果大概是附件这样

   

mp.JPG (177.4 KB, 下载次数: 47)

mp.JPG

作者: anonymous0502    时间: 2012-05-10 12:25
本帖最后由 anonymous0502 于 2012-05-10 13:33 编辑

回复 5# 106033177


不是你说的这样就改这么点就行了吧?

这个demo的问题其实是我更新gui界面的方式不对,不能在子线程中操作gui主界面。换成emit信号的方式程序就不会随机崩溃了,也可以在mp.process和pyside application之间共享变量了。正好前两天看了几个pyside自定义信号的例子。刚才照搬过来,已经可以通过pyside界面显示子进程处理进度了。所做的修改只是把原来在子线程中操作gui界面的方式改成emit信号,其他的基本都没动(用的mp.Value),这样就行了。那个demo我也写得乱七八糟,就不把我修改的重贴在这里了。{:2_166:}

另外你的截图用的好像是另一种进度条显示吧,请问这种样式的进度条是需要设置哪个属性?这个属性我找了好久也没找到。
作者: anonymous0502    时间: 2012-05-10 13:15
还是表示感谢,让我今天把这个程序修改成能正确运行了





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2