为了账号安全,请及时绑定邮箱和手机立即绑定

macOS 后台 PyQt 线程执行超时

macOS 后台 PyQt 线程执行超时

慕的地10843 2023-12-29 14:41:36
当我点击最小化按钮在后台执行这个操作时,线程经常会超出限制时间执行,唤醒后台的程序就恢复正常了。请耐心等待,大约一分钟后就会出现。import sys, random, time, functoolsfrom PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMainWindow, QHBoxLayoutfrom PyQt5.QtCore import QThread, QObjectdef 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@clockdef 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_())
查看完整描述

1 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

关闭 App Nap

defaults write NSGlobalDomain NSAppSleepDisabled -bool YES


查看完整回答
反对 回复 2023-12-29
  • 1 回答
  • 0 关注
  • 31 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信