python强制暂停线程_如何暂停线程(python)

这篇博客探讨了在Python GUI应用中如何管理和切换两个并发线程。作者使用Qt库创建了一个界面,通过按钮控制线程的启动和停止。线程通过全局变量`running`控制循环,并使用Queue进行通信。当尝试暂停线程时,由于线程的运行不可预测,作者寻求一种方法在线程之间无缝切换。博客寻求解决方案以实现线程的暂停和恢复功能。

上下文:

我正在用Qt creator和python中的“behavior”文件构建一个图形界面。我的GUI的测试版本是:

mlq7w.png

预期行为:

我正在运行两个不同的线程,它们被引用到同一个函数,具有不同的输入参数。使用选择器按钮,我可以给变量赋值1或2(并显示它)

按钮启动线程允许正确的线程启动(第一次)。

应该通过修改全局running变量来关闭循环。

这是我的密码# -*- coding: utf-8 -*-

from PyQt4 import QtCore, QtGui, uic

import sys

import threading

import time

import Queue

running = False

first_thread = None

second_thread = None

form_class = uic.loadUiType("simple2.ui")[0]

q = Queue.Queue()

select = 0

def action(string, queue): #function called by threads

global running

while(running):

phrase = string

if queue.qsize() < 10:

queue.put(phrase)

#else:

# print queue.qsize()

class MyWindowClass(QtGui.QMainWindow, form_class):

def __init__(self, parent=None):

QtGui.QMainWindow.__init__(self, parent)

self.setupUi(self)

#buttons

self.startButton.clicked.connect(self.start_clicked)

self.stopButton.clicked.connect(self.stop_clicked)

self.selector.clicked.connect(self.sel_click)

#variables

self.first = False

self.second = False

#queue

self.timer = QtCore.QTimer(self)

self.timer.timeout.connect(self.update_phrase)

self.timer.start(1)

def start_clicked(self): #start button callback

global select

if select > 0:

global running

running = True

print "started"

if (not self.first) & (select == 1):

first_thread.start()

self.first = True

if (not self.second) & (select == 2):

second_thread.start()

self.second = True

self.startButton.setEnabled(False)

self.startButton.setText('Starting...')

def stop_clicked(self): #stop button callback

global running

running = False

print "stopped"

self.startButton.setEnabled(True)

self.startButton.setText('Start Thread')

def sel_click(self): #selector button callback

global select

if select < 2:

select = select + 1

else:

select = 1

self.thread_counter.setText(str(select))

def update_phrase(self): #looping function

global running

if (not q.empty()) & running:

self.startButton.setText('Thread on')

abc = q.get()

print abc

def closeEvent(self, event):

global running

running = False

if __name__ == "__main__":

first_thread = threading.Thread(target=action, args = ("first", q))

second_thread = threading.Thread(target=action, args = ("second", q))

app = QtGui.QApplication(sys.argv)

w = MyWindowClass(None)

w.setWindowTitle('Multiple threads test in python')

w.show()

app.exec_()

现在,每个线程应该在终端上简单地打印它们的参数(“第一个”或“第二个”)。

如果线程是第一次启动的,我的代码可以工作。但我想在线程之间无限次地切换。在

既然线程无法停止,有没有办法“暂停”它们?

我找不到解决方案,我希望有人也能帮我一段代码。提前谢谢你

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值