请选择 进入手机版|继续访问电脑版
发新帖

PyQt 编程中多线程应该用 QThread、QTimer 还是 threading??

[复制链接]
4955 5

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
按我的理解,由于 GIL 的存在,threading.Thread 肯定无法利用多核,任意时刻只有一个线程在跑; QThread 的话在 C++里肯定是能多个同时跑的,但在 PyQt 里它执行的也是 Python 代码,所以应该也和 threading 一样并不能真的并行;而 QTimer 似乎原本就是在创建它的那个线程里跑的,但既然大家都没法真的并行,那跟另外两个似乎是一回事儿,,而且 QTimer 写起来感觉更简洁、直观,也不用 sleep(),,所以我觉得写 PyQt 程序的时候并发逻辑用 QTimer 写就行了,,

举报 使用道具

回复

精彩评论5

crysislinux  新手上路  发表于 2018-1-31 14:45:08 | 显示全部楼层
qthread 是真线程。Python 只是包装,底下还是 c++在跑

举报 使用道具

回复
xivn1987  新手上路  发表于 2018-1-31 14:46:44 | 显示全部楼层
@crysislinux

可是 QThread 的 run 函数里的代码都是 python 代码啊,,比如:
class TimeThread(QtCore.QThread):
    def run(self):
        # ... ...

举报 使用道具

回复
xivn1987  新手上路  发表于 2018-1-31 14:49:04 | 显示全部楼层
v2ex 的回复真是,,,即不能修改、也不能预览,,

举报 使用道具

回复
xivn1987  新手上路  发表于 2018-1-31 16:22:50 | 显示全部楼层
@crysislinux
''' python
class TimeThread(QtCore.QThread):
    def run(self):
        # ... ...
'''

举报 使用道具

回复
crysislinux  新手上路  发表于 2018-1-31 16:52:40 | 显示全部楼层
@XIVN1987 这个还真没仔细想过。但是我以前用过,你可以试试在线程里 sleep,看看主线程 ui 会卡住不

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表