python线程isalive_如何在线程类上使用.isAlive()

我有Gui,有独立的线程,但我需要一个线程成为一个按钮,我的问题是,当我按下按钮,它创建了一个无限循环,不断产生新的线程。在

因此,我需要检查线程.isAlive()是否通过,如果通过,则启动线程:if ThreadedTask.isAlive() == True:

pass

else:

self.queue = Queue.Queue()

ThreadedTask(self.queue).start()

但当我这样做时,我得到了以下错误:

^{pr2}$

有人能告诉我是什么引起的吗?为了完整起见,我在下面添加了完整的类和按钮函数:class ThreadedTask(Thread):

def __init__(self, queue):

Thread.__init__(self)

self.daemon = True

self.queue = queue

def run(self):

proc = Popen("receivetest -f=/dev/pcan33".split(), stdout = PIPE)

if terminated == 1:

proc.kill()

payload = iter(proc.stdout.readline, "")

for line in payload:

if line[0].isdigit():

splitline = line.split()

self.dictAdd(splitline)

def dictAdd(self, info):

global mydict

can_ID = info[4]

p = PCANmsg()

p.dlc = int(info[5])

p.CANtime = float(info[0])

p.hdata0 = info[6]

p.hdata1 = info[7]

p.hdata2 = info[8]

p.hdata3 = info[9]

p.hdata4 = info[10]

p.hdata5 = info[11]

p.hdata6 = info[12]

p.hdata7 = info[13]

p.timing = 1

if can_ID in mydict.keys():

q = mydict[can_ID]

p.COUNT = q.COUNT + 1

p.PCANperiod = p.CANtime - q.CANtime

else:

p.COUNT = 1

p.PCANperiod = 0.0

mydict[can_ID] = p

s = '%06X : %3d %02X %02X %02X %02X %02X %02X %02X %02X\t %8.2F %8d ' %\

(int(can_ID,16),

p.dlc,

int(p.hdata0, 16),

int(p.hdata1, 16),

int(p.hdata2, 16),

int(p.hdata3, 16),

int(p.hdata4, 16),

int(p.hdata5, 16),

int(p.hdata6, 16),

int(p.hdata7, 16),

p.PCANperiod,

p.COUNT)

self.queue.put(s)

按钮功能:def RecvBtn_Click(self):

if ThreadedTask.isAlive() == True:

pass

else:

self.queue = Queue.Queue()

ThreadedTask(self.queue).start()

try:

info = self.queue.get(0)

info_split = info.split()

if self.RecvList.size() < len(mydict):

for _i in mydict.keys():

self.RecvList.insert("end",'%06X : %3d %02X %02X %02X %02X %02X %02X %02X %02X\t %8.2F %8d ' %\

(int(_i,16),

mydict[_i].dlc,

int(mydict[_i].hdata0, 16),

int(mydict[_i].hdata1, 16),

int(mydict[_i].hdata2, 16),

int(mydict[_i].hdata3, 16),

int(mydict[_i].hdata4, 16),

int(mydict[_i].hdata5, 16),

int(mydict[_i].hdata6, 16),

int(mydict[_i].hdata7, 16),

mydict[_i].PCANperiod,

mydict[_i].COUNT))

else:

for i, listbox_entry in enumerate(self.RecvList.get(0, "end")):

list_split = listbox_entry.split()

if list_split[0] == info_split[0]:

self.RecvList.delete(i)

self.RecvList.insert(i, info)

else:

continue

# self.RecvList.insert("end", info)

self.window.after(20, self.RecvBtn_Click)

except Queue.Empty:

self.window.after(100, self.RecvBtn_Click)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值