研二硕, Python +pyqt,多进程问题求助

2020-10-13 17:02:10 +08:00
 gangdong
现在的毕业课题就是构建一个数据处理软件。属于 cpu 密集型。现在的版本是 python+pyqt 构建的。
因为是 GIL 的关系,不能利用多线程,而且我在 UI 线程中没有办法创建多进程就很蛋疼。
现在我的需求是能够并发(多线程貌似行不通),多进程在 UI 中无法调用。
目前我的就计划有几个:
1. html 界面+python 后端运行(这样应该可以多进程把?是否有老哥有相关经验讲一下)
2. 更换语言做(本人非科班,cpp 皮毛,难度挺大,而且后面还要加入一些聚类算法之类的,python 比较方便)
3. 混编?许需要多线程的地方使用 c 重写?这是我查到的方法,就是不知道应该怎么学习这个混编的知识。
谢谢。
5365 次点击
所在节点    Python
68 条回复
coolrice1
2020-10-13 17:57:46 +08:00
QRunnable 和 QThreadPool 可以用吗?
gangdong
2020-10-13 18:10:56 +08:00
@coolrice1
对于 pyqt 来说,多用多线程也是会有 GIL 的影响,也就是虚假的多线程
lyhapple
2020-10-13 18:14:47 +08:00
如果是 python3, 为什么不用协程?
lpts007
2020-10-13 18:26:21 +08:00
"而且我在 UI 线程中没有办法创建多进程就很蛋疼" 这句话怎么回事,是你写错了吧!

很多年前我写的小东西,启动 ui,其中几个按钮是长耗时功能(查数据库,长时间计算),就是点击以后用多进程进行的计算的,没啥问题啊。
ytymf
2020-10-13 18:30:23 +08:00
可以把你的计算任务与 QT 界面完全的解耦,独立启动。二者通过 socket 或者 pipe 通信就好了。没有必要非要当成一个工程。
jin7
2020-10-13 18:31:19 +08:00
楼上说得在理
gangdong
2020-10-13 18:31:53 +08:00
@lyhapple
这个我学习一下,谢谢
menc
2020-10-13 18:32:02 +08:00
拆分两个项目,rpc 调用即可
gangdong
2020-10-13 18:33:13 +08:00
@lpts007
或许是我的问题?我在 qt 的 ui 线程里面确实没有办法创建其他的进程(逻辑上进程不是比线程更高一个层次吗)
gangdong
2020-10-13 18:34:11 +08:00
@ytymf
你好,谢谢你的回复,两者间需要一些数据的传输,您说的这两个方案我先学习一下。
gangdong
2020-10-13 18:34:36 +08:00
@menc
谢谢,我查查您说的方案。
lpts007
2020-10-13 18:34:45 +08:00
@gangdong 不要学
gangdong
2020-10-13 18:37:37 +08:00
@lpts007
什么。。。。
jin7
2020-10-13 18:37:48 +08:00
你搞不定的话 可付费帮你搞定 刚帮人搞定了一样的问题 不喜忽视
lpts007
2020-10-13 18:40:51 +08:00
@gangdong
“我在 qt 的 ui 线程里面确实没有办法创建其他的进程” 何出此言,报什么错
gangdong
2020-10-13 18:42:38 +08:00
@jin7
可以讲一下思路吗,学习学习额
renmu123
2020-10-13 18:44:00 +08:00
gill 是没办法利用多核,只是多线程是伪多线程,出来 io 阻塞没有问题
jin7
2020-10-13 18:45:38 +08:00
@gangdong #16 楼上都讲了 就是那样 只是怎么弄 还要看你项目的具体情况
ClutchBear
2020-10-13 18:53:29 +08:00
flask 后端,
vue 前端
gunicorn 开多个进程, 也不慢的.
knightdf
2020-10-13 19:28:15 +08:00
> 而且我在 UI 线程中没有办法创建多进程就很蛋疼。

可以用啊, 我写过一个小软件就是 qt+multiprocessing

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/714573

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX