macOS 后台 PyQt 线程执行超时

当我点击最小化按钮在后台执行这个操作时,线程经常会超出限制时间执行,唤醒后台的程序就恢复正常了。请耐心等待,大约一分钟后就会出现。

https://img1.sycdn.imooc.com/658e6f0500016b9f03260118.jpg

https://img1.sycdn.imooc.com/658e6f0e00010f3902090214.jpg

import sys, random, time, functools

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMainWindow, QHBoxLayout

from PyQt5.QtCore import QThread, QObject


def clock(func):

    @functools.wraps(func)

    def clocked(*args, **kwargs):

        t0 = time.time()

        result = func(*args, **kwargs)

        elapsed = time.time() - t0

        name = func.__name__

        l_arg = []

        if args:

            l_arg.append(', '.join(repr(arg) for arg in args))

        arg_str = ', '.join(l_arg)

        print('[%0.5fs] %s(%s)' % (elapsed, name, arg_str))

        return result

    return clocked


@clock

def go_sleep(sleep_time):

    time.sleep(sleep_time)


def go_run():

    for i in range(100):

        go_sleep(random.randint(1, 3))


class WorkThread(QObject):

    def __int__(self):

        super(WorkThread, self).__init__()


    def run(self):

        go_run()


class WinForm(QMainWindow):

    def __init__(self, parent=None):

        super(WinForm, self).__init__(parent)

        self.button1 = QPushButton('Run')

        self.button1.clicked.connect(self.onButtonClick)

        self._thread = QThread(self)

        self.wt = WorkThread()

        self.wt.moveToThread(self._thread)

        layout = QHBoxLayout()

        layout.addWidget(self.button1)

        main_frame = QWidget()

        main_frame.setLayout(layout)

        self.setCentralWidget(main_frame)


    def onButtonClick(self):

        self.button1.setText('Running')

        self._thread.started.connect(self.wt.run)

        self._thread.start()


if __name__ == "__main__":

    app = QApplication(sys.argv)

    form = WinForm()

    form.show()

    sys.exit(app.exec_())


慕的地10843
浏览 34回答 1
1回答

小怪兽爱吃肉

关闭 App Napdefaults write NSGlobalDomain NSAppSleepDisabled -bool YES
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python