在PySide中使用多进程与多线程(multiprocess,threading)

本文探讨了在PySide应用中如何利用multiprocessing和threading进行多进程和多线程操作,以避免主线程卡死。通过创建消息队列或使用Pipe进行进程间通信,并结合Qt的信号槽机制,实现子进程事件监听。同时,介绍了Python的subprocess模块,用于启动子进程并与之通信,包括使用call和Popen方法,以及如何处理子程序的输入输出。
摘要由CSDN通过智能技术生成

在UI界面程序中,使用到多进程与多线程是很常见的场景,有时候我们需要将一些耗时的操作放在其他的线程或者进程中,避免卡死主线程。而且利用多线程加Qt的信号槽机制我们可以在子进程中实现事件监听,实时监测进程间的通信。之前一直对线程和进程的理解不太深刻,借着这次机会好好理解了一下多线程与多进程,等之后在接触带锁的多线程模式。

multiprocess是python的一个库,由于python的跨平台特性,我们可以很容易在不同平台中使用多线程,而不用关心底层的实现。对于进程间的通信有Queue和Pipe两种方法,具体可查看python的官方文档multiprocess

示例代码如下,我们在main函数中生成一个消息队列,并启动主界面的事件循环,然后我们将button的click信号与开启一个子进程的槽函数绑定,并利用另一个信号槽给消息队列中填充数据。此时我们需要在子进程中实现一个事件监听,来实时接收信号,实现方式是在子进程中开一个线程,然后启动一个死循环来监听队列消息,以此实现实时接收信号。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import threading as th
import multiprocessing as mp
import quite
from PySide.QtCore import Signal,QObject,QCoreApplication,QEvent

__author__ = 'WingC'

class SignalWrapper(QObject):
    signal = Signal(object)

class main_ui(quite.DialogUiController):
    def __init__(self):
        super().__init__(ui_file='untitled.ui')
        self.q = mp.Queue()

        #开启子进程
        self.button('test').clicked.connect(self.start_slave_ui)
        #主进程发送数据
        self.button('test2').clicked.connect(self.input)

    def st
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值