python线程settrace函数求指点
Idkey 2013-12-16 03:24:27 import sys
import os
import threading
class WorkingThread(threading.Thread):
def __init__(self, *args, **kargs):
threading.Thread.__init__(self, *args, **kargs)
self._operation = 0 # 0,nothing;1,suspend;2,resume;3,kill;
def start(self):
threading.settrace(self.calltrace)
threading.Thread.start(self)
def run(self):
x=0
while(True):
time.sleep(1)
print x
x+=1
os._exit(0)
def linetrace(self, frame, event, arg):
global FLAG_STATE
print 'Run flag'
if event == 'line':
if self._operation == 3:
raise SystemExit()
elif self._operation == 1:
while FLAG_STATE == 1:
time.sleep(0.1)
def calltrace(self, frame, event, arg):
if event == 'call':
return self.linetrace
def kill(self):
self._operation = 3
def suspend(self):
self._operation = 1
def resume(self):
self._operation = 2
if (__name__ == '__main__'):
workingThread = WorkingThread()
workingThread.start()
上面的代码是派生了一个线程类,然后启动。其中跟踪函数部分有一些疑问不太明白,查了三四天实在搜索不到什么有用的信息,求指点。
具体问题如下,
1,threading.settrace(self.calltrace) ,这个函数的详细信息不明白。 在这个例子中threading.settrace(self.calltrace)的执行次数和
while(True):
time.sleep(1)
print x
x+=1
循环体中语句是关联的,但是为什么循环体外面的x=0没有触发执行threading.settrace(self.calltrace)
2,在下面的定义中,参数frame和event代表了什么? 我并没有传入'call'的值,为什么calltrace和linetrace中的语句仍然会执行?
def calltrace(self, frame, event, arg):
if event == 'call':
return self.linetrace